API publique
Intégrez NEX à vos outils
Une API JSON pour lire les offres publiées et, avec une clé d’entreprise, gérer vos offres, suivre vos candidatures et lire votre organigramme.
- Adresse de base
- https://nexjobs.net/api/v1
- Format
- JSON, dates ISO 8601 en temps universel
- Version
- v1
- Authentification
- Clé d’entreprise en en-tête Bearer (sauf points d’accès publics)
Démarrer
- Le propriétaire du compte entreprise ouvre Gestion, puis API et intégrations.
- Il crée une clé, lui donne un nom et coche uniquement les accès nécessaires.
- Il copie la clé affichée une seule fois et l’enregistre dans l’outil qui appellera l’API.
La création de clés demande une formule qui inclut l’accès à l’API. Les offres publiées restent lisibles sans clé.
Authentification
Envoyez la clé dans l’en-tête Authorization de chaque requête, avec le mot Bearer.
Authorization: Bearer nex_live_…Une clé donne accès aux données de votre entreprise : gardez-la sur votre serveur, jamais dans une page web ni dans une application installée. Les points d’accès privés refusent d’ailleurs les appels venant d’un navigateur. En cas de doute, révoquez-la et créez-en une autre.
Accès (scopes)
Chaque clé ne peut faire que ce qui a été coché à sa création.
| Accès | Ce qu’il permet |
|---|---|
| jobs:read | Lire les offres de l’entreprise, tous statuts confondus. |
| jobs:write | Créer des offres et les fermer. |
| applications:read | Lire les candidatures reçues : nom du candidat, étape, issue, dates et pièces. |
| organization:read | Lire l’organigramme : directions, départements, services et postes. |
Limites d’appels
Chaque clé peut envoyer 120 requêtes par minute.
Les points d’accès publics, sans clé, acceptent 120 requêtes par minute et par adresse IP.
Au-delà, la réponse porte le code 429 et l’en-tête Retry-After, qui indique combien de secondes attendre.
Pagination
Les listes acceptent les paramètres page (à partir de 1) et pageSize (20 par défaut, 50 au plus), et renvoient le total et le nombre de pages.
{
"data": [ … ],
"pagination": { "page": 1, "pageSize": 20, "total": 57, "totalPages": 3 }
}Erreurs
Toute erreur a la même forme : un code stable, à utiliser dans votre programme, et un message d’aide en anglais.
{
"error": {
"code": "insufficient_scope",
"message": "This key lacks the \"jobs:write\" scope."
}
}| Code | Signification |
|---|---|
| unauthorized | Aucune clé, ou en-tête Authorization mal formé. |
| invalid_api_key | Clé inconnue ou révoquée. |
| api_access_not_in_plan | La formule de l’entreprise n’inclut plus l’accès à l’API. |
| insufficient_scope | La clé n’a pas l’accès demandé par ce point d’accès. |
| rate_limited | Trop de requêtes : attendez le délai indiqué par Retry-After. |
| invalid_request | Paramètre ou corps de requête invalide ; le détail indique le champ. |
| unsupported_media_type | Le corps doit être envoyé en JSON (Content-Type: application/json). |
| payload_too_large | Le corps dépasse 64 Ko. |
| not_found | Ressource introuvable, ou qui n’appartient pas à votre entreprise. |
| invalid_transition | Changement d’état impossible, par exemple fermer un brouillon. |
| publication_blocked | Publication impossible : adresse e-mail non vérifiée ou quota d’offres actives atteint. Créez l’offre en brouillon. |
| internal_error | Erreur de notre côté : réessayez plus tard. |
Points d’accès
GET/jobs
Liste les offres publiées, les plus récentes d’abord. Filtres : q (texte libre), country (code pays ISO), sector (code de secteur), contract (type de contrat).
Public, sans clé.
curl "https://nexjobs.net/api/v1/jobs?q=engineer&pageSize=10"GET/jobs/{id}
Détail d’une offre publiée : description, pièces demandées et lien vers sa page, où l’on postule.
Public, sans clé.
curl "https://nexjobs.net/api/v1/jobs/<id>"GET/employer/jobs
Liste les offres de votre entreprise, quel que soit leur statut, avec le nombre de candidatures. Filtre : status.
Accès requis : jobs:read
curl "https://nexjobs.net/api/v1/employer/jobs?status=PUBLISHED" \ -H "Authorization: Bearer nex_live_…"POST/employer/jobs
Crée une offre : brouillon par défaut ; avec publish à true, elle est publiée si l’entreprise est vérifiée, sinon elle attend la modération.
Accès requis : jobs:write
curl -X POST "https://nexjobs.net/api/v1/employer/jobs" \ -H "Authorization: Bearer nex_live_…" \ -H "Content-Type: application/json" \ -d '{ "title": "Maintenance technician", "description": "Preventive and corrective maintenance of the plant equipment.", "contractType": "PERMANENT", "payPeriod": "MONTHLY", "currency": "USD", "salaryMin": 900, "salaryMax": 1200, "requiredDocuments": [{ "kind": "CV" }], "publish": true }'GET/employer/jobs/{id}
Détail d’une de vos offres, avec les étapes de son pipeline et le nombre de candidatures à chaque étape.
Accès requis : jobs:read
curl "https://nexjobs.net/api/v1/employer/jobs/<id>" \ -H "Authorization: Bearer nex_live_…"PATCH/employer/jobs/{id}
Ferme une offre publiée ou en attente. Seul le passage à l’état fermé est accepté.
Accès requis : jobs:write
curl -X PATCH "https://nexjobs.net/api/v1/employer/jobs/<id>" \ -H "Authorization: Bearer nex_live_…" \ -H "Content-Type: application/json" \ -d '{ "status": "CLOSED" }'GET/employer/applications
Liste les candidatures reçues. Filtres : jobId, outcome, updatedSince (date ISO 8601).
Accès requis : applications:read
curl "https://nexjobs.net/api/v1/employer/applications?outcome=ACTIVE&updatedSince=2026-09-01T00:00:00Z" \ -H "Authorization: Bearer nex_live_…"GET/organization
Renvoie l’organigramme : directions, départements, services et postes de travail.
Accès requis : organization:read
curl "https://nexjobs.net/api/v1/organization" \ -H "Authorization: Bearer nex_live_…"
Protection des candidats
L’API ne renvoie jamais l’adresse e-mail, le téléphone ni les messages d’un candidat, ni aucun mot de passe ou compte. C’est NEX qui organise la mise en relation entre l’employeur et le candidat.
Évolution de l’API
Dans la version v1, des champs peuvent être ajoutés, jamais renommés ni supprimés. Un changement incompatible donnera une version v2, annoncée à l’avance.
