France Travail data API: offres, candidatures, CV
Parcours Emploi (Play title Parcours Emploi France Travail, formerly Mes Offres) is France Travail's official job-seeker app for people registered with the public employment service. After France Connect / PEAM sign-in, seekers search national vacancies by keyword, contract type and place, open a full posting, apply with a stored CV, track each candidature, keep a business card, follow recruiter invitations (AMI), message a conseiller, book agency appointments, log job-search démarches and read indemnisation. France Travail sits at Le Cinetic, 1 avenue du Docteur Gley, 75020 Paris; the Android listing is rated 4.6 from about 128,000 reviews with 5 million-plus downloads. It is the state job board rather than a private classifieds marketplace, sitting next to InfoJobs in Spain and Catho in Brazil as a national vacancy client.
Each offre carries idOffre, intitule, typeContrat, salaire, nomEntreprise, siret and codeROME. Applications key on candidatureDetail with statut; the CV stores as idGed and nomFichier. A conseiller block adds idConseiller and indemnisation next to planner rows.
ATS and case-management products pull the same vacancy, apply and benefit rows France Travail already shows the seeker — openData Studio turns that public-employment loop into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
PEAM OpenID authorize
GET
/v1/francetravail/oauth/authorizeosintStarts the PEAM OpenID login that yields the authorization code later exchanged for access_token.
Auth: Unauthenticated browser start. Query is client_id, redirect_uri, response_type=code, scope=openid and a state. The PEAM page returns an authorization code to peam-usager://success.
- client_id
- redirect_uri
- response_type
- scope
- state
- code
GET /v1/francetravail/oauth/authorize?client_id=USG_PN062-MESOFFRESMOBILE_SSO&redirect_uri=peam-usager%3A%2F%2Fsuccess&response_type=code&scope=openid&state=st-9c11ab HTTP/1.1 Accept: text/htmlHTTP/1.1 302 Found Location: peam-usager://success?code=SplxlOBeZQQYbYS6WxSbIA&state=st-9c11abExchange code for access token
POST
/v1/francetravail/oauth/tokenosintExchanges the PEAM authorization code for the access_token that gates later offre, candidature and conseiller calls.
Auth: Unauthenticated. Body is the authorization code from GET /v1/francetravail/oauth/authorize. The returned access_token is sent as Authorization: Bearer on later calls.
- grant_type
- code
- redirect_uri
- client_id
- access_token
- token_type
- expires_in
- scope
POST /v1/francetravail/oauth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=peam-usager%3A%2F%2Fsuccess&client_id=USG_PN062-MESOFFRESMOBILE_SSO{ "access_token": "eyJhbGciOi...", "token_type": "Bearer", "expires_in": 3600, "scope": "openid" }Search job offers
GET
/v1/francetravail/offresopendataReturns the vacancy listing used by the search-results screen: intitule, typeContrat, salaire, lieuTravail and pagination.
Auth: Optional Bearer access_token from POST /v1/francetravail/oauth/token. Anonymous search still pages; signed-in calls personalise saved and applied flags.
- resultats
- idOffre
- intitule
- typeContrat
- natureOffre
- salaire
- salaireMin
- nomEntreprise
- siret
- lieuTravail
- codePostal
- libelleCommune
- codeROME
- dateCreation
- dateActualisation
- filtresPossibles
GET /v1/francetravail/offres?motsCles=developpeur&typeContrat=CDI&departement=75&range=0-19 HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "resultats": [ { "idOffre": "075BLXM", "intitule": "Développeur backend", "typeContrat": "CDI", "natureOffre": "Emploi", "salaire": "2800 EUR mensuel", "salaireMin": 2800, "nomEntreprise": "Atelier Nord", "siret": "55212022200013", "lieuTravail": "Paris 10e", "codePostal": "75010", "libelleCommune": "Paris", "codeROME": "M1805", "dateCreation": "2026-09-28T09:12:00Z", "dateActualisation": "2026-10-01T11:04:00Z" } ], "filtresPossibles": [] }Saved job offers
GET
/v1/francetravail/offres/selectionosintLists ads the seeker starred on the Mes offres selection screen.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- offres
- idOffre
- intitule
- nomEntreprise
GET /v1/francetravail/offres/selection HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "offres": [ { "idOffre": "075BLXM", "intitule": "Développeur backend", "nomEntreprise": "Atelier Nord" } ] }Apply to an offer
POST
/v1/francetravail/candidatures/offreosintCreates a candidature against an idOffre with an optional GED CV (idGed).
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token. Body names the idOffre being applied to.
- idOffre
- idGed
- postulateWithProfile
- candidatureDetail
- statut
- dateCreation
POST /v1/francetravail/candidatures/offre HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "idOffre": "075BLXM", "idGed": "ged-441902", "postulateWithProfile": true }{ "idOffre": "075BLXM", "candidatureDetail": { "statut": "ENVOYEE", "dateCreation": "2026-10-02T14:22:11Z" } }Recruiter invitations
GET
/v1/francetravail/amisosintLists recruiter invitations (AMI) shown on the propositions screen.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- amis
- idAMI
- idOffre
- nomEntreprise
- statut
GET /v1/francetravail/amis HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "amis": [ { "idAMI": "ami-8821", "idOffre": "075BLXM", "nomEntreprise": "Atelier Nord", "statut": "EN_COURS" } ] }Professional profile
GET
/v1/francetravail/profilosintReturns the signed-in professional profile used on apply and the business-card screen.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- identifiant
- prenom
- nomNaissance
- telephone
- dateNaissance
- codePostal
- libelleCommune
GET /v1/francetravail/profil HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "identifiant": "id-100442", "prenom": "Camille", "nomNaissance": "Martin", "mail": "[email protected]", "telephone": "+33 6 12 34 56 78", "dateNaissance": "1992-04-11", "codePostal": "75010", "libelleCommune": "Paris" }CV in document store
GET
/v1/francetravail/documentsosintLists CVs stored in the GED that apply can attach via idGed.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- documents
- idGed
- nomFichier
- statut
GET /v1/francetravail/documents HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "documents": [ { "idGed": "ged-441902", "nomFichier": "cv-camille.pdf", "statut": "ACTIF" } ] }Counsellor and benefits
GET
/v1/francetravail/conseillerosintReturns the assigned conseiller and indemnisation block shown on the home cartouche.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- idConseiller
- prenom
- statut
- indemnisation
- libelle
GET /v1/francetravail/conseiller HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "idConseiller": "c-2044", "prenom": "Léa", "statut": "EN_COURS", "indemnisation": { "libelle": "ARE", "statut": "EN_COURS" } }Agency appointments
GET
/v1/francetravail/rendezvousosintLists agency appointments shown on the planner.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- rendezvous
- id
- libelle
- statut
- agence
GET /v1/francetravail/rendezvous HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "rendezvous": [ { "id": "rdv-331", "libelle": "Entretien de suivi", "statut": "PLANIFIE", "agence": "Paris 10 - Magenta" } ] }Job-search démarches
GET
/v1/francetravail/demarchesosintPages declared job-search démarches for the actualisation timeline.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- demarches
- idDemarche
- libelle
- statut
- idActionDeclaree
GET /v1/francetravail/demarches HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "demarches": [ { "idDemarche": "d-9012", "libelle": "Candidature envoyée", "statut": "VALIDEE", "idActionDeclaree": "ad-44" } ] }Unread counsellor messages
GET
/v1/francetravail/messages/unreadosintReturns the unread-message count for the in-app conseiller inbox badge.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token.
- nonLu
- messages
- id
- libelle
GET /v1/francetravail/messages/unread HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "nonLu": 2, "messages": [ { "id": "m-17", "libelle": "Votre rendez-vous de jeudi" } ] }Company lookup by SIRET
GET
/v1/francetravail/companies/{siret}opendataHydrates the employer card from a SIRET on an offer.
Auth: Optional Bearer access_token. Used from an offer card to hydrate the employer.
- siret
- raisonSociale
- nomEntreprise
- codePostal
- libelleCommune
GET /v1/francetravail/companies/55212022200013 HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "siret": "55212022200013", "raisonSociale": "Atelier Nord", "nomEntreprise": "Atelier Nord", "codePostal": "75010", "libelleCommune": "Paris" }SSO session token
POST
/v1/francetravail/ssoosintMints a web-SSO jeton so in-app webviews can open candidat pages as the signed-in usager.
Auth: Authorization: Bearer access_token from POST /v1/francetravail/oauth/token. Issues a short-lived jeton for webviews.
- jeton
- identifiant
POST /v1/francetravail/sso HTTP/1.1 Authorization: Bearer eyJhbGciOi... Accept: application/json{ "jeton": "sso-8f21a4c2", "identifiant": "id-100442" }
Data categories
- job offers
- applications
- CVs
- counsellor
- benefits
- appointments
- companies
- auth-sessions
Where teams use this data
France vacancy feed into an ATS
Poll GET /v1/francetravail/offres (motsCles, typeContrat, departement) so an applicant-tracking system can mirror idOffre, intitule, typeContrat, salaire and codeROME.
Candidature pipeline with recruiter AMIs
Join POST /v1/francetravail/candidatures/offre (candidatureDetail, statut) with GET /v1/francetravail/amis (idAMI) so a career product can show which applies also have an open recruiter invitation.
CV completeness before apply
Read GET /v1/francetravail/profil (identifiant, prenom, mail) and GET /v1/francetravail/documents (idGed, nomFichier) so a coach can tell a seeker why an apply would go out without a CV.
Counsellor slot and benefit snapshot
Pull GET /v1/francetravail/conseiller (idConseiller, indemnisation) with GET /v1/francetravail/rendezvous so a case-management tool can place the next agency slot next to the ARE status.
Frequently asked questions
How does Parcours Emploi authenticate API calls?
GET /v1/francetravail/oauth/authorize starts PEAM OpenID (client_id, redirect_uri, scope=openid). POST /v1/francetravail/oauth/token exchanges the authorization code for access_token. Later calls send Authorization: Bearer with that access_token.
Which endpoints expose job offers and applications?
GET /v1/francetravail/offres returns idOffre, intitule, typeContrat, salaire, nomEntreprise, siret and codeROME. GET /v1/francetravail/offres/selection lists starred ads. POST /v1/francetravail/candidatures/offre creates a candidatureDetail; GET /v1/francetravail/amis lists recruiter invitations by idAMI.
What profile and CV fields are returned?
GET /v1/francetravail/profil returns identifiant, prenom, nomNaissance, mail, telephone, dateNaissance, codePostal and libelleCommune. GET /v1/francetravail/documents lists idGed and nomFichier in the GED.
Can the API see the counsellor, benefits and appointments?
Yes. GET /v1/francetravail/conseiller returns idConseiller and indemnisation. GET /v1/francetravail/rendezvous lists agency slots. GET /v1/francetravail/demarches pages idDemarche. GET /v1/francetravail/messages/unread is the inbox badge.
Apps similar to Parcours Emploi
- InfoJobs - Job Search — InfoJobs is Adevinta's Spanish job board: offer search by province and telework, curriculum apply and application tracking.
- Indeed Job Search — Indeed is a global job-search app: keyword search, apply, application status and recruiter messages.
- Vagas de Emprego: Catho — Catho is a Brazilian vacancy board with curriculum, ranking scores and recruiter inbox threads.
- OCC: Job Search — OCCMundial is Mexico's classifieds job board: vacancy search, CV, apply and recruiter-view screens.
- Bumeran — Bumeran is Jobint's Spanish-language classifieds job board for Argentina, with avisos, CV apply and a net-salary calculator.
- LinkedIn: Community & Network — LinkedIn is the professional network overlapping France Travail's seeker profile and apply loop.
- Pôle emploi — The former Pôle emploi brand still appears on sister apps and the PEAM login the current France Travail client uses.
Topics
- france travail api
- parcours emploi data api
- idOffre intitule codeROME
- peam openid france travail
- france job seeker api
- francetravail candidatures
- indemnisation conseiller
- idGed cv france travail
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use