- Description et paramètres de l’endpoint
- Mode Sandbox : pour tester en toute sécurité
- Champs obligatoires
- Recommandation sur l’envoi des données
- Exemple d’une mise à jour partielle (JSON brut)
- Tableau des champs
- Réponse attendue
- Tester avec cURL
- Tester avec Postman
- Informations d’authentification requises
- En-têtes HTTP requis
- Exécution locale et fuseau horaire
- Exemple complet : modification d’une offre d’emploi via PUT [PHP / JSON] (avec cURL)
- Exemple complet : modification d’une offre d’emploi via PUT [Python / JSON] (avec requests)
- Exemple complet : modification d’une offre d’emploi via PUT [C# / JSON]
- Exemple complet : modification d’une offre d’emploi via PUT [JavaScript / JSON] (avec Node.js)
- Codes HTTP de réponse possibles
- Messages d’erreur possibles
L’endpoint job-edit JSON (https://api.easyjobs.fr/v1/json/job-edit)
permet de mettre à jour une offre d’emploi existante via une requête PUT. Idéal pour corriger ou compléter une annonce déjà publiée sans devoir la recréer entièrement. Le corps de la requête doit contenir un objet JSON identifiant l’offre (id
) et les champs à modifier (title
, date
, 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 éditer plusieurs offres en une seule requête, privilégiez l’endpoint jobs-edit JSON
.
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.
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 formatYYYY-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.
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.
{
"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"
}
Cet exemple illustre la mise à jour partielle d'une offre d'emploi existante. Les champs envoyés dans la requête seront modifiés, tandis que tous les autres resteront inchangés dans l’offre.
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.
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. |
{
"message":"Offre d'emploi modifiée avec succès. Offre synchronisée avec succès."
}
En cas d’erreur, consultez la page Gestion des erreurs.
curl -X PUT https://api.easyjobs.fr/v1-sandbox/json/job-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 @offre-modification.json
Assurez-vous que le fichier offre-modification.json contient le JSON brut montré ci-dessus.
- Méthode :
PUT
- URL :
https://api.easyjobs.fr/v1-sandbox/json/job-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
- Authorization:
- Corps (Body) : sélectionner
raw
, choisirJSON
, et coller le contenu de l’exemple JSON brut (voir section "Exemple d’une mise à jour partielle (JSON brut)").
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.
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.
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.
// URL de l’endpoint API (mode sandbox)
$endpoint = "https://api.easyjobs.fr/v1-sandbox/json/job-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 = [
"id" => "4M0123456N43N25",
"date" => $date,
"title" => "Développeur Web Fullstack Senior - H/F",
"contract_type" => "CDD",
"work_hours" => "39 heures"
];
$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);
import requests
import json
from datetime import datetime, timedelta
# URL de l’endpoint API (mode sandbox)
endpoint = "https://api.easyjobs.fr/v1-sandbox/json/job-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 = {
"id": "4M0123456N43N25",
"date": date,
"title": "Développeur Web Fullstack Senior - H/F",
"contract_type": "CDD",
"work_hours": "39 heures"
}
# 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)
using System.Text;
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/job-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 = $@"{{
""id"": ""4M0123456N43N25"",
""date"": ""{date}"",
""title"": ""Développeur Web Fullstack Senior - H/F"",
""contract_type"": ""CDD"",
""work_hours"": ""39 heures""
}}";
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}");
}
}
}
}
}
// 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())}`;
}
const dateFormatted = formatDate(now);
// Données à envoyer (JSON)
const data = {
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"
};
const apiToken = "API_TOKEN";
const secretKey = "SECRET_KEY";
async function editJob() {
try {
const response = await fetch("https://api.easyjobs.fr/v1-sandbox/json/job-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
},
// Conversion de l’objet JS en chaîne JSON
body: JSON.stringify(data)
});
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);
}
}
editJob();
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. |
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). |
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.