- Présentation de l’API
- Guide de démarrage rapide
- Cas d’usage courants
- Authentification
- En-têtes HTTP requis
- Exemple d'en-têtes requis (JSON)
- Exemple d'en-têtes requis (XML)
- Formats acceptés
- Exemple JSON (offre unique)
- Exemple JSON (offres multiples)
- Exemple XML (offre unique)
- Exemple XML (offres multiples)
- Endpoints disponibles
- Codes HTTP de réponse possibles (résumé)
- Gestion des erreurs
- Exemple de réponse en cas d'erreur
- Bonnes pratiques et recommandations
- Foire aux questions (FAQ)
- Intégration visuelle et tests
- Swagger / Outils de test interactifs
- Contrôle des versions
- Contact et support
EasyJobs API est une interface conçue pour faciliter la publication, la modification et la suppression d'offres d'emploi sur le site web https://www.easyjobs.fr. L'API prend en charge les formats JSON et XML afin de s'adapter à différents besoins d'intégration.
URL de base :
Toutes les requêtes passent par : https://api.easyjobs.fr/v1/
Bien que le chemin contienne /v1/, il ne reflète pas une gestion active de multiples versions — il s’agit uniquement d’une convention d’organisation.
Cette section vous permet de réaliser une première intégration simple avec l’API EasyJobs en quelques étapes.
- Créer un compte EasyJobs : Vous devez disposer d’un compte valide pour obtenir vos identifiants API (token et clé secrète).
- Récupérer vos identifiants API : Connectez-vous à votre tableau de bord EasyJobs API et accédez à la section Gestion des clés. Copiez votre
Token
et votreClé secrète
. - Choisir un format de données : L’API supporte deux formats :
JSON
etXML
. Sélectionnez celui qui correspond à votre environnement. - Envoyer votre première requête POST : Testez l’envoi d’une offre d’emploi en suivant l’un des exemples de code fournis : PHP / Python / C# / JavaScript.
- Vérifier la réponse : Si l’offre a été acceptée, vous recevrez un code HTTP
200
ou201
. En cas d’erreur, un message détaillé vous indiquera la cause.
- Publication simple d’une offre d’emploi : Envoyer une offre à la fois pour un poste spécifique.
- Publication en masse : Envoyer plusieurs offres dans une seule requête via les endpoints Jobs Posting JSON ou Jobs Posting XML.
- Modification d’une offre existante : Mettre à jour un poste publié à l’aide de l’identifiant unique de l’offre.
- Suppression d’une offre : Retirer une offre de votre catalogue sans supprimer les autres.
- Synchronisation complète : Mettre à jour votre base de données externe en comparant les offres existantes avec celles publiées sur EasyJobs.
L’accès à l’API EasyJobs est protégé par un système d’authentification basé sur deux éléments obligatoires :
- Token d’authentification (Bearer)
Il s’agit d’un identifiant unique associé à votre compte EasyJobs. Il doit être envoyé dans l’en-tête HTTP Authorization comme suit : - Clé secrète (en-tête HTTP spécifique à EasyJobs)
Chaque requête doit également contenir une clé secrète transmise via un en-tête personnalisé :
Authorization: Bearer <API_TOKEN>
Usersecretkey: <SECRET_KEY>
Les deux éléments doivent être valides pour que la requête soit acceptée.
Recommandations de sécurité
- Ne partagez jamais vos identifiants API publiquement ou dans des dépôts de code.
- Renouvelez régulièrement vos clés via le tableau de bord EasyJobs.
- Si vous suspectez un usage frauduleux, désactivez immédiatement les identifiants concernés.
-
Accept-Language : permet de configurer la langue des réponses de l’API. Valeurs possibles :
en
,fr
,es
. -
X-Client-Lang : indique au serveur la technologie ou l’environnement d’exécution qui envoie la requête (par ex. : PHP, Python, C#, JavaScript). Cette information facilite la journalisation côté API et permet d’adapter le formatage éventuel de la réponse. Valeurs attendues :
PHP
,Python
,C#
,JavaScript
. -
Content-Type : indique le format des données envoyées dans le corps de la requête. Utilisez
application/json
pour les envois JSON, ouapplication/xml
pour les envois XML. -
Origin : identifie l’origine (URL) d’où provient la requête. Cet en-tête est obligatoire pour passer les contrôles de sécurité CORS. Le ou les domaines autorisés doivent être déclarés au préalable dans votre espace personnel EasyJobs API, accessible via le menu latéral : Domaines → Domaines autorisés. Accédez à cette section ici. Exemple :
Origin: https://www.votre-domaine.com
. -
User-Agent : identifiant unique de votre application. Cet en-tête est requis pour des raisons de sécurité. Utilisez un nom explicite, incluant une version si possible. Exemple recommandé :
User-Agent: EasyJobsClient/1.0
. -
Informations d’authentification : Pour exécuter correctement vos requêtes, veillez à remplacer les valeurs par défaut par vos propres informations :
- API_TOKEN : votre jeton d’authentification personnel, disponible dans le dashboard EasyJobs API, rubrique Gestion des clés.
- SECRET_KEY : votre clé secrète utilisateur, également accessible dans la même rubrique.
Ces paramètres sont essentiels pour authentifier vos requêtes et garantir une réponse adaptée à votre environnement.
Exemple d'en-têtes requis (JSON) :
Authorization: Bearer <API_TOKEN>
Usersecretkey: <SECRET_KEY>
Content-Type: application/json
Accept-Language: fr
User-Agent: EasyJobsClient/1.0
X-Client-Lang: <LANGAGE_CLIENT>
Origin: https://www.domaine-origine.com
Exemple d'en-têtes requis (XML) :
Authorization: Bearer <API_TOKEN>
Usersecretkey: <SECRET_KEY>
Content-Type: application/xml
Accept-Language: fr
User-Agent: EasyJobsClient/1.0
X-Client-Lang: <LANGAGE_CLIENT>
Origin: https://www.domaine-origine.com
L’API EasyJobs prend en charge deux formats standards pour l’échange de données : JSON et XML. Vous pouvez utiliser l’un ou l’autre selon les préférences de votre système ou langage de programmation.
Format JSON :
- Recommandé pour les environnements modernes (JavaScript, PHP, Python, etc.)
- Syntaxe plus légère, plus facile à manipuler côté client
- Utilisé dans la majorité des exemples fournis
Exemple JSON (offre unique)
{
"id": "4M0123456N43N25",
"date": "2025-04-22 10:00:00",
"valid_through": "2025-05-22 10:00:00",
"title": "Développeur Web Fullstack - H/F",
"contract_type": "CDI",
"work_hours": "35 heures",
"employment_type": "Temps-plein",
"description": "Nous recherchons un Développeur Web Fullstack, pour développer une application.",
"position": "Nous recherchons un(e) développeur(se) web fullstack passionné(e) pour rejoindre notre équipe dynamique. Vous participerez à la conception et au développement d'applications web innovantes pour des clients internationaux.",
"profile": "Vous avez une expérience de 3 ans minimum en PHP, JavaScript et frameworks modernes. Vous aimez travailler en équipe et relever de nouveaux défis.",
"location": "Paris",
"postcode": "75001",
"region": "Île-de-France",
"country": "France",
"subsidiary": "Agence Web",
"url": "https://www.exemple.com/offre",
"salary": "",
"salary_min": "27400€/an",
"salary_max": "32100€/an",
"rome": "M1805",
"available": "1",
"experience": "Expérience souhaitée",
"company_logo_url": "https://www.exemple.com/logo.png",
"posted_via": "My Company"
}
Exemple JSON (offres multiples)
{
"jobs": {
"job": [
{
"id": "4M0123456N43N25",
"date": "2025-04-22 10:00:00",
"valid_through": "2025-05-22 10:00:00",
"title": "Développeur Web Fullstack - H/F",
"contract_type": "CDI",
"work_hours": "35 heures",
"employment_type": "Freelance",
"description": "Nous recherchons un Développeur Web Fullstack, pour développer une application.",
"position": "Nous recherchons un(e) développeur(se) web fullstack passionné(e) pour rejoindre notre équipe dynamique. Vous participerez à la conception et au développement d'applications web innovantes pour des clients internationaux.",
"profile": "Vous avez une expérience de 3 ans minimum en PHP, JavaScript et frameworks modernes. Vous aimez travailler en équipe et relever de nouveaux défis.",
"location": "Paris",
"postcode": "75001",
"region": "Île-de-France",
"country": "France",
"subsidiary": "Agence Web",
"url": "https://www.exemple.com/offre",
"salary": "",
"salary_min": "27400€/an",
"salary_max": "32100€/an",
"rome": "M1805",
"available": "1",
"experience": "Expérience souhaitée",
"company_logo_url": "https://www.exemple.com/logo.png",
"posted_via": "My Company"
},
{
"id": "4M0123456N43N26",
"date": "2025-04-22 11:00:00",
"valid_through": "2025-05-22 11:00:00",
"title": "Ingénieur DevOps - H/F",
"contract_type": "CDI",
"work_hours": "35 heures",
"employment_type": "Temps-plein",
"description": "Dans le cadre de notre croissance, nous recherchons un ingénieur DevOps pour renforcer notre équipe technique.",
"position": "Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.",
"profile": "Connaissances solides en CI/CD, conteneurs (Docker/Kubernetes), et scripts d’automatisation (Bash, Python).",
"location": "Lyon",
"postcode": "69000",
"region": "Auvergne-Rhône-Alpes",
"country": "France",
"subsidiary": "Pôle Infrastructure",
"url": "https://www.exemple.com/offre-devops",
"salary": "42000€/an",
"salary_min": "",
"salary_max": "",
"rome": "M1810",
"available": "1",
"experience": "Expérience exigée",
"company_logo_url": "https://www.exemple.com/logo-devops.png",
"posted_via": "My Company"
}
]
}
}
Cet exemple montre comment envoyer plusieurs offres d’emploi dans une seule requête POST, en utilisant le format JSON. Chaque offre est définie comme un objet job
dans une structure de tableau.
Format XML :
- Recommandé pour les systèmes hérités ou intégrations avec certains ATS
- Structure plus rigide mais très utilisée en contexte d’entreprise
Exemple XML (offre unique)
<?xml version="1.0" encoding="UTF-8"?>
<job>
<id><![CDATA[4M0123456N43N25]]></id>
<date><![CDATA[2025-04-22 10:00:00]]></date>
<valid_through><![CDATA[2025-05-22 10:00:00]]></valid_through>
<title><![CDATA[Développeur Web Fullstack - H/F]]></title>
<contract_type><![CDATA[CDI]]></contract_type>
<work_hours><![CDATA[35 heures]]></work_hours>
<employment_type><![CDATA[Temps-plein]]></employment_type>
<description><![CDATA[Nous recherchons un Développeur Web Fullstack, pour développer une application.]]></description>
<position><![CDATA[Nous recherchons un(e) développeur(se) web fullstack passionné(e) pour rejoindre notre équipe dynamique. Vous participerez à la conception et au développement d'applications web innovantes pour des clients internationaux.]]></position>
<profile><![CDATA[Vous avez une expérience de 3 ans minimum en PHP, JavaScript et frameworks modernes. Vous aimez travailler en équipe et relever de nouveaux défis.]]></profile>
<location><![CDATA[Paris]]></location>
<postcode><![CDATA[75001]]></postcode>
<region><![CDATA[Île-de-France]]></region>
<country><![CDATA[France]]></country>
<subsidiary><![CDATA[Agence Web]]></subsidiary>
<url><![CDATA[https://www.exemple.com/offre]]></url>
<salary><![CDATA[27400€/an]]></salary>
<salary_min></salary_min>
<salary_max></salary_max>
<rome><![CDATA[M1805]]></rome>
<available><![CDATA[1]]></available>
<experience><![CDATA[Débutant accepté]]></experience>
<company_logo_url><![CDATA[https://www.exemple.com/logo.png]]></company_logo_url>
<posted_via><![CDATA[My Company]]></posted_via>
</job>
Exemple XML (offres multiples)
<?xml version="1.0" encoding="UTF-8"?>
<jobs>
<job>
<id><![CDATA[4M0123456N43N25]]></id>
<date><![CDATA[2025-04-22 10:00:00]]></date>
<valid_through><![CDATA[2025-05-22 10:00:00]]></valid_through>
<title><![CDATA[Développeur Web Fullstack - H/F]]></title>
<contract_type><![CDATA[CDI]]></contract_type>
<work_hours><![CDATA[35 heures]]></work_hours>
<employment_type><![CDATA[Temps-plein]]></employment_type>
<description><![CDATA[Nous recherchons un Développeur Web Fullstack, pour développer une application.]]></description>
<position><![CDATA[Nous recherchons un(e) développeur(se) web fullstack passionné(e) pour rejoindre notre équipe dynamique. Vous participerez à la conception et au développement d'applications web innovantes pour des clients internationaux.]]></position>
<profile><![CDATA[Vous avez une expérience de 3 ans minimum en PHP, JavaScript et frameworks modernes. Vous aimez travailler en équipe et relever de nouveaux défis.]]></profile>
<location><![CDATA[Paris]]></location>
<postcode><![CDATA[75001]]></postcode>
<region><![CDATA[Île-de-France]]></region>
<country><![CDATA[France]]></country>
<subsidiary><![CDATA[Agence Web]]></subsidiary>
<url><![CDATA[https://www.exemple.com/offre]]></url>
<salary><![CDATA[27400€/an]]></salary>
<salary_min></salary_min>
<salary_max></salary_max>
<rome><![CDATA[M1805]]></rome>
<available><![CDATA[1]]></available>
<experience><![CDATA[Débutant accepté]]></experience>
<company_logo_url><![CDATA[https://www.exemple.com/logo.png]]></company_logo_url>
<posted_via><![CDATA[My Company]]></posted_via>
</job>
<job>
<id><![CDATA[4M0123456N43N26]]></id>
<date><![CDATA[2025-04-22 11:30:00]]></date>
<valid_through><![CDATA[2025-05-22 11:30:00]]></valid_through>
<title><![CDATA[Ingénieur DevOps - H/F]]></title>
<contract_type><![CDATA[CDI]]></contract_type>
<work_hours><![CDATA[35 heures]]></work_hours>
<employment_type><![CDATA[Temps-plein]]></employment_type>
<description><![CDATA[Dans le cadre de notre croissance, nous recherchons un ingénieur DevOps pour renforcer notre équipe technique.]]></description>
<position><![CDATA[Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.]]></position>
<profile><![CDATA[Connaissances solides en CI/CD, conteneurs (Docker/Kubernetes) et scripts d’automatisation (Bash, Python).]]></profile>
<location><![CDATA[Lyon]]></location>
<postcode><![CDATA[69000]]></postcode>
<region><![CDATA[Auvergne-Rhône-Alpes]]></region>
<country><![CDATA[France]]></country>
<subsidiary><![CDATA[Pôle Infrastructure]]></subsidiary>
<url><![CDATA[https://www.exemple.com/offre-devops]]></url>
<salary></salary>
<salary_min><![CDATA[39500€/an]]></salary_min>
<salary_max><![CDATA[42000€/an]]></salary_max>
<rome><![CDATA[M1810]]></rome>
<available><![CDATA[1]]></available>
<experience><![CDATA[Expérience exigée]]></experience>
<company_logo_url><![CDATA[https://www.exemple.com/logo-devops.png]]></company_logo_url>
<posted_via><![CDATA[My Company]]></posted_via>
</job>
</jobs>
Cet exemple illustre l’envoi de plusieurs offres d’emploi dans une seule requête POST au format XML. Chaque offre est encapsulée dans une balise <job>
à l’intérieur d’un conteneur racine.
Endpoints JSON | Méthode | Description | Intégration | URL |
---|---|---|---|---|
/jobs-posting | POST | Soumettre plusieurs offres en une seule requête | Code | Copier |
/job-posting | POST | Soumettre une offre d'emploi | Code | Copier |
/jobs-edit | PUT | Modifier plusieurs offres en une seule requête | Code | Copier |
/job-edit | PUT | Modifier une offre d'emploi | Code | Copier |
/jobs-delete | DELETE | Supprimer plusieurs offres par leurs identifiants | Code | Copier |
Endpoints XML | Méthode | Description | Intégration | URL |
---|---|---|---|---|
/jobs-posting | POST | Soumettre plusieurs offres en une seule requête | Code | Copier |
/job-posting | POST | Soumettre une offre d'emploi | Code | Copier |
/jobs-edit | PUT | Modifier plusieurs offres en une seule requête | Code | Copier |
/job-edit | PUT | Modifier une offre d'emploi | Code | Copier |
/jobs-delete | DELETE | Supprimer plusieurs offres par leurs identifiants | Code | Copier |
Autres endpoints | Méthode | Description | Intégration | URL |
---|---|---|---|---|
/jobs-list | GET | Obtenir la liste des offres publiées | Code | Copier |
/job-delete | DELETE | Supprimer une offre par son identifiant | Code | Copier |
Code | Signification | Description |
---|---|---|
200 | OK | Requête traitée avec succès. |
201 | Created | Ressource créée avec succès. |
400 | Bad Request | Données invalides ou incomplètes. |
403 | Forbidden | Accès refusé (clé secrète incorrecte). |
422 | Unprocessable Entity | Erreurs de validation métier. |
500 | Internal Server Error | Erreur côté serveur. |
Pour plus de détails et la liste complète des messages personnalisés, consultez la page : Codes et messages d’erreurs
Chaque champ a des validations spécifiques (longueur, caractères autorisés, etc.). Lorsqu’une requête échoue, l’API EasyJobs renvoie une réponse structurée au format JSON, contenant des informations précises sur le motif du rejet. Cela permet aux intégrateurs de détecter rapidement le problème et de le corriger.
Exemple de réponse en cas d'erreur :
{
"message": "Le champ 'title' doit contenir au moins 12 caractères."
}
Pour une description complète des erreurs possibles, des formats de réponse et des conseils de traitement, voir la documentation : Codes et messages d’erreurs
- Valider les données localement avant envoi à l'API : vérifiez la longueur des champs, les caractères autorisés, les formats de dates, montants, identifiants, etc. Cela permet d’anticiper d’éventuels durcissements de schéma.
- Bien gérer les codes de réponse HTTP : adaptez votre logique selon le retour de l’API.
- 200 OK – Requête traitée avec succès.
- 400 Bad Request – Erreur de validation.
- 401 Unauthorized – Authentification invalide.
- 403 Forbidden – Accès refusé (clé secrète incorrecte).
- 422 Unprocessable Entity – Données bien formées mais incohérentes.
- 429 Too Many Requests – Limite de requêtes atteinte.
- 500 Internal Server Error – Erreur côté serveur.
- Implémenter des tentatives de réessai en cas d'erreurs temporaires (ex : 429, 500). Ajoutez un délai avant de renvoyer la requête.
- Prévoir un mécanisme de fallback ou de journalisation : enregistrez les offres échouées avec leur ID, le code et le message d’erreur, et prévoyez un traitement différé si nécessaire.
- Garder à jour le token et la clé secrète : renouvelez régulièrement vos identifiants depuis le tableau de bord EasyJobs API.
- Suivre régulièrement la documentation : pour connaître les évolutions, nouveautés ou changements de règles métiers.
Pour consulter l’ensemble des questions les plus fréquentes sur l’utilisation de l’API (authentification, envoi multiple, format des champs, erreurs récurrentes, etc.), veuillez consulter la page dédiée : Foire Aux Questions (FAQ)
Pour découvrir les outils recommandés pour tester visuellement l’API EasyJobs (Postman, Swagger Editor, interface intégrée à venir), consultez la page suivante : Intégration visuelle et tests
Pour obtenir la spécification Swagger complète (OpenAPI), l’importer dans Swagger Editor ou découvrir les projets à venir autour de Swagger UI, consultez cette page dédiée : Swagger / Outils de test interactifs
L’API EasyJobs ne gère actuellement pas de version explicite dans les URLs (comme /v2/ ou /v3/). Toutefois, un système de contrôle interne est en place pour assurer la stabilité des fonctionnalités.
Politique actuelle :
- Les évolutions sont apportées de manière progressive et sans rupture pour les intégrateurs.
- Chaque changement est documenté et annoncé dans les notes de version.
- Les utilisateurs n’ont pas besoin de modifier leur intégration sauf en cas de mise à jour critique (rare).
- Support technique : support@easyjobs.fr
- Signaler erreurs ou suggestions par email.
Cette documentation est mise à jour régulièrement en fonction des changements et améliorations apportés à l'API.