Chargement en cours ...
Description et paramètres de l’endpoint

Le endpoint jobs-edit JSON (https://api.easyjobs.fr/v1/json/jobs-edit) permet de modifier en une seule requête plusieurs offres d’emploi via une requête PUT. Envoyez un tableau JSON contenant plusieurs objets de mise à jour. Chaque objet doit inclure au minimum l’id de l’offre et la date, ainsi que les champs à modifier (title, profile, salary, etc.), encodé en application/json. En retour, l’API fournit une réponse structurée :

  • 200 OK si la mise à jour a été effectuée avec succès.
  • 400 Bad Request si un champ est manquant, mal formaté ou invalide.
  • 401 Unauthorized jeton d’authentification manquant ou invalide.
  • 403 Forbidden si l’authentification échoue ou l’origine n’est pas autorisée.
  • 404 Not Found si l’ID de l’offre n’existe pas.
  • 405 Method Not Allowed si vous n’utilisez pas la méthode PUT.
  • 500 Internal Server Error en cas d’erreur inattendue côté serveur.

Pour modifier une seule offre d’emploi, utilisez l’endpoint job-edit JSON.

Mode Sandbox : pour tester en toute sécurité

Tous les exemples ci-dessous sont conçus pour fonctionner en mode sandbox, afin de vous permettre de tester l’API EasyJobs sans impact réel. Pour passer en mode production, il suffit de remplacer v1-sandbox par v1 dans l’URL. Il est fortement recommandé de réaliser tous vos tests en mode sandbox avant d’utiliser l’environnement réel.

Pour en savoir plus sur le fonctionnement du mode sandbox, les environnements disponibles et les bonnes pratiques de test, consultez la page dédiée : Mode Sandbox de l'API EasyJobs.

Champs obligatoires

Pour éditer une offre d’emploi existante, seuls deux champs sont obligatoires :

  • id : Identifiant unique de l’offre d’emploi à modifier.
  • date : Date et heure de la mise à jour au format YYYY-MM-DD HH:mm:ss.

Pour les autres champs :

  • Les champs initialement obligatoires (title, position, location, contract_type, etc.) peuvent être modifiés en envoyant une nouvelle valeur valide. Si vous envoyez ces champs vides, les valeurs précédentes seront conservées, car ces champs ne peuvent jamais être vides.
  • Les champs initialement facultatifs peuvent être modifiés en envoyant de nouvelles valeurs valides ou être vidés en les envoyant sans contenu. Dans tous les cas, il est nécessaire de respecter le type de données, les formats et les limites de longueur définis dans les spécifications initiales.

Consultez la documentation complète des champs pour plus de détails sur chaque paramètre, leurs formats et leurs valeurs acceptées.

Recommandation sur l’envoi des données

Pour optimiser la visibilité de vos offres d’emploi dans les résultats de recherche, il est fortement recommandé de fournir le maximum de champs disponibles.

Plus les informations transmises sont complètes (description, profil recherché, localisation détaillée, fourchette salariale, etc.), plus vos annonces seront pertinentes et attractives pour les candidats.

Une offre bien renseignée améliore non seulement le référencement interne sur EasyJobs, mais également l’expérience utilisateur en permettant aux candidats de filtrer et de trouver facilement les postes qui correspondent à leurs attentes.

Certains champs, bien que facultatifs, peuvent être utilisés pour améliorer l’indexation et affiner les résultats de recherche.

Exemple d’une mise à jour partielle (JSON brut)
                  
                  {
                    "jobs": {
                      "job": [
                        {
                          "id": "4M0123456N43N25",                    
                          "date": "2025-04-22 10:00:00",
                          "description": "Mise à jour : nous recherchons toujours activement un développeur Fullstack expérimenté en React et Node.js pour renforcer notre équipe.",
                          "salary_min": "32000€/an",
                          "salary_max": "37000€/an"
                        },
                        {
                          "id": "4M0123456N43N26",
                          "date": "2025-04-22 11:00:00",
                          "title": "Ingénieur DevOps - H/F",
                          "work_hours": "39 heures",
                          "position": "Mise à jour : Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.",
                          "salary": "42000€/an"
                        }
                      ]
                    }
                  }
                

Cet exemple illustre la mise à jour partielle de plusieurs offres d’emploi existantes. Les champs fournis dans chaque requête seront modifiés, tandis que les autres resteront inchangés.

Important : Le champ "date" est obligatoire. Il correspond ici à la date de mise à jour de l'offre. Cette date sera affichée dans l'annonce pour indiquer la dernière modification effectuée sur l'offre. Le champ "id" est également obligatoire afin d'identifier précisément l'offre à modifier.

Tableau des champs
Champ Type Obligatoire Description
id string Oui Identifiant unique de l’offre. Alphanumérique, entre 4 et 128 caractères.
date string Oui Date de création de l’offre au format YYYY-MM-DD HH:mm:ss.
valid_through string Non Date d’expiration de l’offre au format YYYY-MM-DD HH:mm:ss. Doit être postérieure à date.
title string Oui Titre de l’offre d’emploi. Entre 12 et 160 caractères.
contract_type string Oui Type de contrat (ex : CDI, CDD, Stage, etc). Entre 3 et 64 caractères.
work_hours string Non Temps de travail (ex : 35h/semaine, 35 heures, etc). Lettres, chiffres, espaces, / et -.
employment_type string Non Type d’emploi. Une des valeurs : Temps-plein, Temps-partiel, Temporaire, Freelance.
description string Non Description de l’entreprise. Entre 48 et 1024 caractères.
position string Oui Description du poste. Entre 64 et 12288 caractères.
profile string Non Profil recherché. Entre 64 et 12288 caractères.
location string Oui Lieu du poste. Entre 4 et 64 caractères.
postcode string Non Code postal (5 chiffres).
region string Non Région. Entre 5 et 32 caractères. Lettres, espaces et tiret uniquement.
country string Oui Pays. Entre 4 et 64 caractères. Lettres et tiret uniquement.
subsidiary string Non Nom de l'entreprise. Entre 2 et 64 caractères.
url string Non URL HTTPS de l’offre sur le site de l’entreprise. Doit commencer par https://.
salary string Conditionnel Salaire global. Format : 1600€/mois, 2000$/an, etc. Si utilisé, ne pas remplir salary_min ni salary_max.
salary_min string Conditionnel Salaire minimum. Format : 1500€/mois, 2000$/an, etc. Obligatoire si salary n’est pas renseigné.
salary_max string Conditionnel Salaire maximum. Format : 2500€/mois, 3000$/an, etc. Obligatoire si salary n’est pas renseigné.
rome string Non Code ROME. Doit commencer par une lettre suivie de chiffres.
available int Non Nombre de postes à pourvoir (entier, jusqu’à 3 chiffres).
experience string Non Niveau d’expérience. Une des valeurs : Débutant accepté, Expérience exigée, Expérience souhaitée.
company_logo_url string Non URL HTTPS du logo de l’entreprise. Doit commencer par https://.
posted_via string Non Source ou plateforme de publication. Entre 2 et 64 caractères.
Réponse attendue

                  {
                      "status": "Offres d'emploi en file d'attente pour le traitement.",
                      "processed_jobs": 2,
                      "results": [
                          {
                              "job_id": "4M0123456N43N25",
                              "status": "success",
                              "message": "L'offre d'emploi 4M0123456N43N25 est en file d'attente pour le traitement."
                          },
                          {
                              "job_id": "4M0123456N43N26",
                              "status": "success",
                              "message": "L'offre d'emploi 4M0123456N43N26 est en file d'attente pour le traitement."
                          }
                      ]
                  }
                

En cas d’erreur, consultez la page Gestion des erreurs.

Tester avec cURL

                curl -X PUT https://api.easyjobs.fr/v1-sandbox/json/jobs-edit \
                -H "Authorization: Bearer <API_TOKEN>" \
                -H "Usersecretkey: <SECRET_KEY>" \
                -H "Content-Type: application/json" \
                -H "Accept-Language: fr" \
                -H "User-Agent: EasyJobsClient/1.0" \
                -H "X-Client-Lang: <LANGAGE_CLIENT>" \
                -H "Origin: https://www.domaine-origine.com" \
                -d @offres-modification.json
                

Assurez-vous que le fichier offres-modification.json contient le JSON brut montré ci-dessus.

Tester avec Postman
  • Méthode : PUT
  • URL : https://api.easyjobs.fr/v1-sandbox/json/jobs-edit
  • En-têtes requis :
    • 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
  • Corps (Body) : sélectionner raw, choisir JSON, et coller le contenu de l’exemple JSON brut (voir section "Exemple d’une mise à jour partielle (JSON brut)").
Informations d’authentification requises

Pour exécuter correctement vos requêtes, veillez à remplacer les valeurs par défaut par vos propres informations d’authentification :

  • 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, accessible également dans la rubrique "Gestion des clés".

Ces informations sont obligatoires pour autoriser l’accès à l’API et assurer l’authentification de vos requêtes.

En-têtes HTTP requis

Pour que vos requêtes soient correctement interprétées par l’API, les en-têtes suivants sont obligatoires :

  • Authorization : jeton d’authentification personnel (Bearer API_TOKEN).
  • Usersecretkey : votre clé secrète utilisateur.
  • Content-Type : application/json.
  • Accept-Language : définit la langue de la réponse (valeurs possibles : fr, en, es).
  • User-Agent : identifiant de votre client (ex. : EasyJobsClient/1.0). Obligatoire pour des raisons de sécurité.
  • X-Client-Lang : nom de la technologie utilisée (ex. : PHP, Python, JavaScript, C#), utile pour le formatage des réponses.
  • Origin : URL d’origine de la requête, qui doit être autorisée dans la section « Domaines autorisés » du dashboard.
Exécution locale et fuseau horaire

Certains de nos exemples ont un décalage volontaire de +2 heures pour compenser la différence horaire entre le serveur (UTC) et l’heure locale française (UTC+2). Lorsque vous exécutez les scripts directement sur votre poste local (localhost), n’ajoutez pas ces 2 heures supplémentaires. En effet, en environnement local, votre PC étant déjà réglé sur l’heure de Paris, ajouter ces 2 heures entraînerait le rejet de votre requête par l’API, car la date serait considérée comme trop éloignée dans le futur.

Exemple complet : modification d’une offre d’emploi via PUT [PHP / JSON] (avec cURL)

                  // URL de l’endpoint API (mode sandbox)
                  $endpoint = "https://api.easyjobs.fr/v1-sandbox/json/jobs-edit";

                  // Authentification
                  $apiToken = "API_TOKEN";   // Token d’authentification Bearer
                  $secretKey = "SECRET_KEY"; // Clé secrète utilisateur

                  // Génération des dates (maintenant +2h), format : YYYY-MM-DD HH:mm:ss
                  $date = date('Y-m-d H:i:s', strtotime('+2 hour'));

                  // Données à envoyer dans le corps de la requête (payload)
                  $data = [
                    "jobs" => [
                      "job" => [
                        [
                          "id" => "4M0123456N43N25",
                          "date" => $date,
                          "description" => "Mise à jour : nous recherchons toujours activement un développeur Fullstack expérimenté en React et Node.js pour renforcer notre équipe.",
                          "salary_min" => "32000€/an",
                          "salary_max" => "37000€/an"
                        ],
                        [
                          "id" => "4M0123456N43N26",
                          "date" => $date,
                          "title" => "Ingénieur DevOps - H/F",
                          "work_hours" => "39 heures",
                          "position" => "Mise à jour : Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.",
                          "salary" => "42000€/an"
                        ]
                      ]
                    ]
                  ];

                  $jsonData = json_encode($data);

                  // En-têtes HTTP requis  
                  $ch = curl_init($endpoint);
                  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
                  curl_setopt($ch, CURLOPT_HTTPHEADER, [
                      "Authorization: Bearer $apiToken",         // Token d’authentification
                      "Usersecretkey: $secretKey",               // Clé secrète utilisateur
                      "Content-Type: application/json",          // Format JSON
                      "Accept-Language: fr",                     // Langue de la réponse (valeurs possibles : en, fr, es)
                      "User-Agent: EasyJobsClient/1.0",          // Identifiant de l’application appelante (nom + version)
                      "X-Client-Lang: PHP",                      // Indique au serveur la technologie cliente, afin d’adapter le formatage de la réponse
                      "Origin: https://www.domaine-origine.com", // Remplacez par l’URL depuis laquelle vous appelez l’API
                  ]);
                  curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);

                  $response = curl_exec($ch);

                  // Affichage de la réponse API
                  if (curl_errno($ch)) {
                      echo "Erreur cURL : " . curl_error($ch);

                  } else {
                      echo "Réponse de l’API : " . $response;
                  }

                  curl_close($ch);
                
Exemple complet : modification d’une offre d’emploi via PUT [Python / JSON] (avec requests)

                  import requests
                  import json
                  from datetime import datetime, timedelta

                  # URL de l’endpoint API (mode sandbox)
                  endpoint = "https://api.easyjobs.fr/v1-sandbox/json/jobs-edit"

                  # Authentification
                  api_token = "API_TOKEN"    # Token d’authentification Bearer
                  secret_key = "SECRET_KEY"  # Clé secrète utilisateur

                  # Génération de la date (maintenant +2h), format : YYYY-MM-DD HH:mm:ss
                  date = (datetime.now() + timedelta(hours=2)).strftime('%Y-%m-%d %H:%M:%S')

                  # Données à envoyer dans le corps de la requête (payload)
                  data = {
                      "jobs": {
                          "job": [
                              {
                                  "id": "4M0123456N43N25",
                                  "date": date,
                                  "description": "Mise à jour : nous recherchons toujours activement un développeur Fullstack expérimenté en React et Node.js pour renforcer notre équipe.",
                                  "salary_min": "32000€/an",
                                  "salary_max": "37000€/an"
                              },
                              {
                                  "id": "4M0123456N43N26",
                                  "date": date,
                                  "title": "Ingénieur DevOps - H/F",
                                  "work_hours": "39 heures",
                                  "position": "Mise à jour : Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.",
                                  "salary": "42000€/an"
                              }
                          ]
                      }
                  }

                  # En-têtes HTTP requis
                  headers = {
                      "Authorization": f"Bearer {api_token}",       # Token d’authentification
                      "Usersecretkey": secret_key,                  # Clé secrète utilisateur
                      "Content-Type": "application/json",           # Format JSON
                      "Accept-Language": "fr",                      # Langue de la réponse (valeurs possibles : en, fr, es)
                      "User-Agent": "EasyJobsClient/1.0",           # Identifiant de l’application appelante (nom + version)
                      "X-Client-Lang": "Python",                    # Indique au serveur la technologie cliente, afin d’adapter le formatage de la réponse
                      "Origin": "https://www.domaine-origine.com"   # Remplacez par l’URL depuis laquelle vous appelez l’API
                  }

                  # Envoi de la requête PUT
                  response = requests.put(endpoint, headers=headers, json=data)

                  # Affichage de la réponse API
                  print("Réponse de l’API :", response.text)
                
Exemple complet : modification d’une offre d’emploi via PUT [C# / JSON]

                  using System;
                  using System.Net.Http;
                  using System.Text;
                  using System.Threading.Tasks;

                  namespace EasyJobsApi
                  {
                      class Program
                      {
                          static async Task Main(string[] args)
                          {
                              // URL de l’endpoint API (mode sandbox)
                              var endpoint = "https://api.easyjobs.fr/v1-sandbox/json/jobs-edit";

                              // Authentification : Token API et clé secrète utilisateur
                              var apiToken = "API_TOKEN";
                              var secretKey = "SECRET_KEY";

                              /* ---------------------------------------------------------
                                 Modification d’une offre existante
                                 ---------------------------------------------------------
                                 - id    : identifiant de l’offre à modifier
                                 - date  : date et heure de la modification (obligatoire)
                              --------------------------------------------------------- */
                              var date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                              // Données à envoyer pour modifier l’offre d’emploi (JSON)
                              var jsonData = $@"{{
                                ""jobs"": {{
                                  ""job"": [
                                    {{
                                      ""id"": ""4M0123456N43N25"",
                                      ""date"": ""{date}"",
                                      ""title"": ""Développeur Web Fullstack Senior - H/F"",
                                      ""contract_type"": ""CDD"",
                                      ""work_hours"": ""39 heures""
                                    }},
                                    {{
                                      ""id"": ""4M0123456N43N26"",
                                      ""date"": ""{date}"",
                                      ""title"": ""Ingénieur DevOps - H/F"",
                                      ""work_hours"": ""39 heures"",
                                      ""position"": ""Mise à jour : Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients."",
                                      ""salary"": ""42000€/an""
                                    }}
                                  ]
                                }}
                              }}";

                              using (var client = new HttpClient())
                              {
                                  // Ajout des en-têtes requis
                                  client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiToken}");       // Token d'authentification
                                  client.DefaultRequestHeaders.Add("Usersecretkey", secretKey);                  // Clé secrète utilisateur
                                  client.DefaultRequestHeaders.Add("Accept-Language", "fr");                     // Langue de la réponse (valeurs possibles : en, fr, es)
                                  client.DefaultRequestHeaders.Add("User-Agent", "EasyJobsClient/1.0");          // Identifiant de l’application appelante (nom + version)
                                  client.DefaultRequestHeaders.Add("X-Client-Lang", "C#");                       // Indique au serveur la technologie cliente, afin d’adapter le formatage de la réponse
                                  client.DefaultRequestHeaders.Add("Origin", "https://www.domaine-origine.com"); // Remplacez par l’URL depuis laquelle vous appelez l’API

                                  // Création du corps de la requête (JSON avec encodage UTF-8)
                                  var content = new StringContent(jsonData, Encoding.UTF8, "application/json");

                                  try
                                  {
                                      // Envoi de la requête PUT à l’API
                                      var request = new HttpRequestMessage(HttpMethod.Put, endpoint) { Content = content };
                                      var response = await client.SendAsync(request);

                                      // Lecture et affichage de la réponse de l’API
                                      var responseContent = await response.Content.ReadAsStringAsync();
                                      Console.WriteLine($"Code de réponse : {response.StatusCode}");
                                      Console.WriteLine("Réponse de l’API :");
                                      Console.WriteLine(responseContent);
                                  }
                                  catch (Exception ex)
                                  {
                                      // Gestion des erreurs réseau ou autres exceptions
                                      Console.WriteLine($"Erreur : {ex.Message}");
                                  }
                              }
                          }
                      }
                  }
                
Exemple complet : modification d’une offre d’emploi via PUT [JavaScript / JSON] (avec Node.js)

                  // index.js
                  // Node.js 18+

                  /**
                   * Copiez ce code dans un fichier appelé `index.js`, dans un nouveau dossier sur votre ordinateur.
                   *
                   * Ouvrez ce dossier avec un éditeur de code comme Visual Studio Code (VS Code).
                   *
                   * Assurez-vous que Node.js est installé sur votre machine. Si ce n’est pas le cas, téléchargez-le ici : https://nodejs.org
                   *
                   * Dans le terminal, entrez cette commande pour initialiser :
                   *   > npm install node
                   *
                   * Lancez le script depuis le terminal :
                   *   > node index.js
                   *
                   * Si tout est correct, la réponse de l’API s’affichera dans la console.
                   * En cas d’erreur, un message clair s’affichera pour vous aider à corriger.
                   **/

                  // Date actuelle
                  const now = new Date();

                  // Formater en "YYYY-MM-DD HH:mm:ss"
                  function formatDate(date) {
                    const pad = n => n.toString().padStart(2, '0');
                    return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
                  }

                  // Générer la date dynamique unique
                  const dateFormatted = formatDate(now);

                  // Données à envoyer (JSON)
                  const data = {
                    jobs: {
                      job: [
                        {
                          id: "4M0123456N43N25",
                          date: dateFormatted,
                          description: "Mise à jour : nous recherchons toujours activement un développeur Fullstack expérimenté en React et Node.js pour renforcer notre équipe.",
                          salary_min: "32000€/an",
                          salary_max: "37000€/an"
                        },
                        {
                          id: "4M0123456N43N26",
                          date: dateFormatted,
                          title: "Ingénieur DevOps - H/F",
                          work_hours: "39 heures",
                          position: "Mise à jour : Vous participerez à l’automatisation, au déploiement et à la supervision des infrastructures cloud de nos clients.",
                          salary: "42000€/an"
                        }
                      ]
                    }
                  };

                  const apiToken = "API_TOKEN";
                  const secretKey = "SECRET_KEY";

                  async function editJobs() {
                    try {
                      const response = await fetch("https://api.easyjobs.fr/v1-sandbox/json/jobs-edit", {
                        method: "PUT",
                        headers: {
                          "Authorization": `Bearer ${apiToken}`,       // Token d’authentification
                          "Usersecretkey": secretKey,                  // Clé secrète utilisateur
                          "Content-Type": "application/json",          // Format JSON
                          "Accept-Language": "fr",                     // Langue de la réponse (valeurs possibles : en, fr, es)
                          "User-Agent": "EasyJobsClient/1.0",          // Identifiant de l’application appelante (nom + version)
                          "X-Client-Lang": "Javascript",               // Indique au serveur la technologie cliente, afin d’adapter le formatage de la réponse
                          "origin": "https://www.domaine-origine.com"  // Remplacez par l’URL depuis laquelle vous appelez l’API
                        },
                        body: JSON.stringify(data) // Conversion de l’objet JS en chaîne JSON
                      });

                      const text = await response.text();
                      try {
                        // Affichage de la réponse de l’API
                        console.log("Réponse de l’API :", JSON.parse(text));
                      } catch {
                        // Gestion des erreurs réseau ou autres exceptions
                        console.error("Erreur lors de l’envoi de la requête :", text);
                      }
                    } catch (error) {
                      console.error(error);
                    }
                  }

                  editJobs();
                
Codes HTTP de réponse possibles
Code HTTP Signification Description
200 OK Offre mise à jour avec succès.
400 Bad Request Données invalides ou mal formées (exemple : champ manquant ou format incorrect).
403 Forbidden Authentification échouée (jeton ou clé invalide), ou origine non autorisée.
404 Not Found L’offre à modifier n’a pas été trouvée. L’identifiant est peut-être incorrect ou l’offre a été supprimée.
405 Method Not Allowed Méthode non autorisée (exemple : POST au lieu de PUT).
500 Internal Server Error Erreur inattendue côté serveur. Contactez le support si nécessaire.
Messages d’erreur possibles
Code Message Cause probable
400 Le champ 'id' est obligatoire. L’identifiant de l’offre est requis pour effectuer une mise à jour.
400 Le champ 'date' est obligatoire. La date de mise à jour n’a pas été transmise.
400 Le champ 'date' doit avoir un format valide : YYYY-MM-DD HH:mm:ss Format de date invalide.
403 Non autorisé. Jeton invalide. Jeton d’authentification incorrect ou expiré.
403 Origine non autorisée. L’en-tête Origin est manquant ou non autorisé.
404 L’offre d’emploi est introuvable. Elle a peut-être été supprimée. Aucun enregistrement correspondant à l’identifiant transmis.
405 Méthode non autorisée. Méthode HTTP incorrecte (exemple : POST au lieu de PUT).
500 Erreur interne du serveur. Exception côté serveur (ex : accès à une clé absente dans les données).
Recommandation

Veillez à vérifier et valider les données envoyées avant l’envoi de la requête pour limiter les erreurs. En cas de doute, consultez la documentation des erreurs.

Copyright EasyJobs API © 2025 - Tous droits réservés