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

L’endpoint jobs-list (https://api.easyjobs.fr/v1/jobs-list) permet de récupérer la liste des offres d’emploi publiées par un utilisateur, via une requête GET. Il prend en charge plusieurs paramètres facultatifs pour affiner les résultats :

  • page : Numéro de page (pagination). Valeur par défaut : 1.
  • limit : Nombre maximum d’offres par page (max. 50, défaut : 10).
  • search : Mot-clé à rechercher dans le titre ou la description.
  • location : Nom de la ville ou région pour filtrer les offres par lieu.
  • job_id : Identifiant unique d’une offre spécifique.
  • date_created : Date de création de l’offre (YYYY-MM-DD).
  • last_update : Date de dernière mise à jour (YYYY-MM-DD).

L’API renvoie un tableau d’offres d’emploi structurées correspondant aux critères indiqués, ou une erreur claire en cas de problème :

  • 200 OK si la récupération des offres a réussi.
  • 401 Unauthorized si le jeton d’authentification est manquant ou invalide.
  • 403 Forbidden si la clé secrète est absente ou si l’origine n’est pas autorisée.
  • 405 Method Not Allowed si vous utilisez une méthode autre que GET.
  • 500 Internal Server Error en cas d’erreur inattendue sur le serveur.

Pour plus de détails sur les champs renvoyés dans la réponse, consultez la référence complète des champs.

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.

Exemple de requête GET avec filtres

                  GET https://api.easyjobs.fr/v1-sandbox/jobs-list?page=2&limit=5&search=developer&location=Paris
                

Cet exemple illustre une requête GET vers l’endpoint jobs-list avec pagination (page 2, 5 résultats), recherche par mot-clé “developer” et filtre de localisation sur “Paris”.

Aucun corps de requête n’est requis. Ajustez les paramètres selon vos besoins pour affiner les résultats.

Réponse attendue

                  {
                    "status": "success",
                    "jobs": [
                      {
                        "id": "4M0123456N43N25",
                        "title": "Développeur Web Fullstack - H/F",
                        "location": "Paris",
                        "date_created": "2025-06-16 10:00:00",
                        "last_update": "2025-06-18 14:30:00",
                        "url": "https://api.easyjobs.fr/ui/jobs/details/128/1/128685569580f90d/developpeur-fullstack.html"
                      },
                      {
                        "id": "4M0123456N43N26",
                        "title": "Ingénieur DevOps - H/F",
                        "location": "Lyon",
                        "date_created": "2025-06-15 09:00:00",
                        "last_update": "2025-06-17 16:45:00",
                        "url": "https://api.easyjobs.fr/ui/jobs/details/128/1/128685569610aaf2/ingenieur-devops.html"
                      },
                      … (8 offres supplémentaires) …
                    ],
                    "pagination": {
                      "current_page": 1,
                      "total_pages": 51,
                      "total_jobs": 501
                    }
                  }
                

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

Tester avec cURL

                curl -X GET "https://api.easyjobs.fr/v1/jobs-list?page=1&limit=10&search=développeur" \
                -H "Authorization: Bearer <API_TOKEN>" \
                -H "Usersecretkey: <SECRET_KEY>" \
                -H "Accept-Language: fr" \
                -H "User-Agent: EasyJobsClient/1.0" \
                -H "X-Client-Lang: <LANGAGE_CLIENT>" \
                -H "Origin: https://www.domaine-origine.com"
                

Exemple de récupération de la première page (10 résultats) filtrés par mot-clé “développeur”. Supprimez ou modifiez les paramètres selon vos besoins.

Tester avec Postman
  • Méthode : GET
  • URL : https://api.easyjobs.fr/v1/jobs-list?page=1&limit=10&search=développeur
  • Params (onglet « Params ») :
    • page = 1 (facultatif)
    • limit = 10 (facultatif, max 50)
    • search = developer (facultatif)
    • location = Paris (facultatif)
    • job_id = 4M0123456N43N25 (facultatif)
    • date_created = 2025-06-16 (facultatif)
    • last_update = 2025-06-18 (facultatif)
  • En-têtes requis :
    • Authorization: Bearer {{API_TOKEN}}
    • Usersecretkey: {{SECRET_KEY}}
    • Accept-Language: fr
    • User-Agent: EasyJobsClient/1.0
    • X-Client-Lang: Postman
    • Origin: https://www.domaine-origine.com
  • Corps (Body) : aucun (GET).

Avant d’exécuter la requête, sélectionnez l’environnement easyjobs—sandbox pour que les variables {{API_TOKEN}} et {{SECRET_KEY}} soient automatiquement remplacées.

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.
  • 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.
Exemple complet : Récupération de la liste des offres d’emploi via GET [PHP] (avec cURL)

                  // URL de l’endpoint avec paramètres GET (mode sandbox)
                  $endpoint = "https://api.easyjobs.fr/v1-sandbox/jobs-list?page=1&limit=10";

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

                  // Initialisation cURL
                  $ch = curl_init($endpoint);
                  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                  curl_setopt($ch, CURLOPT_HTTPHEADER, [
                      "Authorization: Bearer $apiToken",         // Token d’authentification
                      "Usersecretkey: $secretKey",               // Clé secrète utilisateur
                      "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
                  ]);

                  // Exécution et affichage
                  $response = curl_exec($ch);
                  if (curl_errno($ch)) {
                      echo 'Erreur cURL : ' . curl_error($ch);
                      
                  } else {
                      echo 'Réponse de l’API : ' . $response;
                  }
                  curl_close($ch);
                
Exemple complet Front-end : Liste dynamique d’offres [JavaScript]

Cet exemple montre comment intégrer l’endpoint jobs-list dans une interface JavaScript simple. Vous pouvez copier ce code dans un fichier index.html, l’héberger sur votre serveur et interagir avec l’API EasyJobs pour afficher une liste paginée d’offres, filtrer par mot-clé et exporter les résultats en JSON ou XML.

Les filtres disponibles sont :

  • page : numéro de page à afficher (pagination)
  • limit : nombre de résultats par page (max 50)
  • search : mot-clé à rechercher dans le titre ou la description
  • location : ville ou région pour restreindre les résultats
  • job_id : identifiant exact d’une offre spécifique
  • date_created : date de création de l’offre (YYYY-MM-DD)
  • last_update : date de dernière mise à jour (YYYY-MM-DD)

Saisissez vos critères dans le champ “Endpoint”, puis cliquez sur Consulter pour interroger l’API. Ensuite, utilisez les boutons Exporter JSON ou Exporter XML pour récupérer les données dans le format souhaité.


                  <!DOCTYPE html>
                  <html lang="fr">
                    <head>
                      <meta charset="UTF-8">
                      <title>Liste dynamique d’offres</title>
                      <style>
                        .jobs-container {
                          max-width: 600px;
                          margin: 0 auto;
                        }
                        .job-item {
                          border: 1px solid #ddd;
                          padding: 16px;
                          margin-bottom: 12px;
                        }
                        .job-item h3 {
                          margin: 0 0 8px 0;
                        }
                        .job-item p {
                          margin: 4px 0;
                        }
                        .pagination {
                          margin-top: 10px;
                          text-align: center;
                        }
                        .error-message {
                          color: red;
                          text-align: center;
                          margin-top: 20px;
                        }
                        .export-json-btn,
                        .export-xml-btn {
                          margin-top: 0px;
                          display: none; /* Masqué par défaut */
                        }
                        .div-input {
                          padding: 30px 0 0 0;
                          text-align:center;
                        }
                      </style>
                    </head>

                    <body>
                      <div class="div-input">
                        <!-- Champ de saisie pour modifier dynamiquement l’endpoint -->
                        <label for="endpointInput">Endpoint:</label>
                        <input type="text" id="endpointInput" size="70" 
                               value="https://api.easyjobs.fr/v1-sandbox/jobs-list?limit=10&page=1&search=">

                        <button id="fetchButton">Consulter</button>
                        <button id="exportJsonButton" class="export-json-btn">Exporter JSON</button>
                        <button id="exportXmlButton" class="export-xml-btn">Exporter XML</button>
                      </div>

                      <div class="pagination" id="pagination-top"></div>
                      <div class="jobs-container" id="jobs-container"></div>
                      <div class="pagination" id="pagination-bottom"></div>
                      <div class="error-message" id="error-message"></div>

                      <script>
                        document.addEventListener('DOMContentLoaded', function() {
                          const endpointInput     = document.getElementById('endpointInput');
                          const fetchButton       = document.getElementById('fetchButton');
                          const exportJsonButton  = document.getElementById('exportJsonButton');
                          const exportXmlButton   = document.getElementById('exportXmlButton');
                          const container         = document.getElementById('jobs-container');
                          const errorMessage      = document.getElementById('error-message');
                          const paginationTop     = document.getElementById('pagination-top');
                          const paginationBottom  = document.getElementById('pagination-bottom');

                          // En-têtes d’authentification
                          const headersConfig = {
                            'Authorization': 'Bearer API_TOKEN',
                            'Usersecretkey': 'SECRET_KEY',
                            'Accept': 'application/json',
                            'Accept-Language': 'fr'
                          };

                          // Variable globale pour stocker la dernière réponse de l’API
                          let lastResponseData = null;

                          // Fonction pour convertir JSON en XML
                          function jsonToXml(data) {
                            let xml = '<response>';

                            if (data.status) {
                              xml += `<status>${data.status}</status>`;
                            }

                            // jobs (array)
                            if (Array.isArray(data.jobs)) {
                              xml += '<jobs>';
                              data.jobs.forEach(job => {
                                xml += '<job>';
                                if (job.id) xml += `<id>${job.id}</id>`;
                                if (job.title) xml += `<title>${job.title}</title>`;
                                if (job.location) xml += `<location>${job.location}</location>`;
                                if (job.date_created) xml += `<date_created>${job.date_created}</date_created>`;
                                if (job.last_update) xml += `<last_update>${job.last_update}</last_update>`;
                                if (job.friendly_url) xml += `<friendly_url>${job.friendly_url}</friendly_url>`;
                                if (job.url) xml += `<url>${job.url}</url>`;
                                xml += '</job>';
                              });
                              xml += '</jobs>';
                            }

                            // pagination (objet)
                            if (data.pagination) {
                              xml += '<pagination>';
                              if (data.pagination.current_page) {
                                xml += `<current_page>${data.pagination.current_page}</current_page>`;
                              }
                              if (data.pagination.total_pages) {
                                xml += `<total_pages>${data.pagination.total_pages}</total_pages>`;
                              }
                              if (data.pagination.total_jobs) {
                                xml += `<total_jobs>${data.pagination.total_jobs}</total_jobs>`;
                              }
                              xml += '</pagination>';
                            }

                            xml += '</response>';
                            return xml;
                          }

                          // Fonction pour récupérer et afficher les offres
                          function fetchJobs() {
                            const url = endpointInput.value.trim();

                            container.innerHTML        = '';
                            paginationTop.innerHTML    = '';
                            paginationBottom.innerHTML = '';
                            errorMessage.textContent   = '';

                            exportJsonButton.style.display = 'none';
                            exportXmlButton.style.display  = 'none';

                            fetch(url, {
                              method: 'GET',
                              headers: headersConfig
                            })
                            .then(response => {
                              if (!response.ok) {
                                throw new Error('Erreur lors de la récupération des données de l’API : ' + response.status);
                              }
                              return response.json();
                            })
                            .then(data => {
                              console.log('Réponse de l’API :', data);

                              if (!data || data.status !== 'success') {
                                throw new Error('L’API n’a pas renvoyé les données attendues');
                              }

                              // Stocker la réponse dans la variable globale
                              lastResponseData = data;

                              // Afficher les boutons d’export (JSON, XML)
                              exportJsonButton.style.display = 'inline-block';
                              exportXmlButton.style.display  = 'inline-block';

                              const jobs = data.jobs || [];
                              if (jobs.length === 0) {
                                container.innerHTML = '<p>Aucune offre disponible.</p>';
                                return;
                              }

                              // Afficher les offres d’emploi
                              jobs.forEach(job => {
                                const jobItem = document.createElement('div');
                                jobItem.classList.add('job-item');

                                const titleElem = document.createElement('h3');
                                titleElem.textContent = job.title || 'Sans titre';

                                const locationElem = document.createElement('p');
                                locationElem.textContent = 'Localisation : ' + (job.location || 'Inconnue');

                                const dateElem = document.createElement('p');
                                dateElem.textContent = 'Date de création : ' + (job.date_created || 'N/A');

                                const linkElem = document.createElement('a');
                                linkElem.href = job.url || '#';
                                linkElem.textContent = 'Voir l’offre';
                                linkElem.target = '_blank';

                                jobItem.appendChild(titleElem);
                                jobItem.appendChild(locationElem);
                                jobItem.appendChild(dateElem);
                                jobItem.appendChild(linkElem);
                                container.appendChild(jobItem);
                              });

                              // Afficher la pagination (en haut et en bas)
                              if (data.pagination) {
                                const currentPage = data.pagination.current_page;
                                const totalPages  = data.pagination.total_pages;
                                const totalJobs   = data.pagination.total_jobs;

                                const paginationHTML = `
                                  <p>Page ${currentPage} sur ${totalPages}</p>
                                  <p>Total d’offres : ${totalJobs}</p>
                                `;

                                paginationTop.innerHTML    = paginationHTML;
                                paginationBottom.innerHTML = paginationHTML;
                              }
                            })
                            .catch(error => {
                              console.error('Erreur détectée :', error);
                              errorMessage.textContent = error.message;
                            });
                          }

                          // Fonction pour exporter en JSON
                          function exportToJson() {
                            if (!lastResponseData) {
                              alert('Aucune donnée à exporter. Réalisez d’abord une recherche.');
                              return;
                            }

                            const jsonStr = JSON.stringify(lastResponseData, null, 2);

                            const blob = new Blob([jsonStr], { type: 'application/json' });
                            const url  = URL.createObjectURL(blob);

                            // Simuler un clic sur le lien <a> pour télécharger
                            const link = document.createElement('a');
                            link.href = url;
                            link.download = 'export.json';
                            document.body.appendChild(link);
                            link.click();
                            document.body.removeChild(link);
                            URL.revokeObjectURL(url);
                          }

                          // Fonction pour exporter en XML
                          function exportToXml() {
                            if (!lastResponseData) {
                              alert('Aucune donnée à exporter. Réalisez d’abord une recherche.');
                              return;
                            }

                            const xmlStr = jsonToXml(lastResponseData);

                            const blob = new Blob([xmlStr], { type: 'application/xml' });
                            const url  = URL.createObjectURL(blob);

                            // Simuler un clic sur le lien <a> pour télécharger
                            const link = document.createElement('a');
                            link.href = url;
                            link.download = 'export.xml';
                            document.body.appendChild(link);
                            link.click();
                            document.body.removeChild(link);
                            URL.revokeObjectURL(url);
                          }

                          // Événement pour le bouton “Consulter”
                          fetchButton.addEventListener('click', fetchJobs);

                          // Événement pour la touche “Enter” dans le champ de saisie
                          endpointInput.addEventListener('keydown', function(event) {
                            if (event.key === 'Enter') {
                              fetchJobs();
                            }
                          });

                          // Événements pour l’exportation
                          exportJsonButton.addEventListener('click', exportToJson);
                          exportXmlButton.addEventListener('click', exportToXml);
                        });
                      </script>
                    </body>
                  </html>
                
Codes HTTP de réponse possibles
Code HTTP Signification Description
200 OK Liste des offres récupérée avec succès.
400 Bad Request Paramètres invalides ou mal formés (ex. : page non numérique, limit hors limites, format de date incorrect).
401 Unauthorized Jeton d’authentification manquant ou invalide.
403 Forbidden Clé secrète utilisateur absente ou origine non autorisée.
405 Method Not Allowed Méthode HTTP incorrecte (ex. : POST ou DELETE au lieu de GET).
500 Internal Server Error Erreur inattendue côté serveur. Contactez le support si nécessaire.
Messages d’erreur possibles
Code Message Cause probable
400 Requête invalide. Paramètres de requête manquants, mal formatés ou hors limites (page, limit, date_created, etc.).
401 Non autorisé. Jeton invalide. Jeton d’authentification manquant, expiré ou incorrect.
403 Interdit. Origine non autorisée. L’en-tête Origin est absent ou ne correspond pas à un domaine autorisé.
405 Méthode non autorisée. Utilisation d’une méthode HTTP autre que GET.
500 Erreur interne du serveur. Exception ou dysfonctionnement inattendu côté serveur.
Recommandation

Avant d’envoyer une requête de récupération, vérifiez que vos paramètres (page, limit, filtres) sont corrects et respectent les plages autorisées (par ex. limit ≤ 50). Utilisez la pagination et les filtres pour réduire la taille des réponses et optimiser les performances. En cas de doute ou d’erreur, consultez la documentation des erreurs.

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