
API integration for France Travail
We build your France Travail connector
We wire France Travail APIs into your careers site, ATS or HR tool: official listings, ROME occupations, local labour tension. Without scraping the public site.
- Senior product team
- public-data connectors in production
- from scoping to monitoring
What does the France Travail API provide and which tools should integrate it?
France Travail (formerly Pôle emploi) exposes public APIs covering job listings, ROME skills framework and labour market indicators. You integrate them into HR platforms, recruitment tools or career guidance applications to display live job postings, suggest training based on a job title, or enrich a job description with the associated ROME competencies. Access is free after registration on the developer portal; each API requires a separate subscription.
What our clients build on the France Travail API
A territorial offers widget
A municipality or development-agency site: the official feed, not a scrape of francetravail.fr.
Enriching an ATS / job board
France Travail offers and consenting partners, with redistribution terms respected.
ROME occupation autocomplete
A hiring or training form: we store the occupation code, not only the label.
Occupation tightness on a territory
Labour Market API for an HR firm or an OPCO: « tightness on occupation X in the 44 », admin sources already crossed.
What it changes on your careers site
Engineering in service of a measurable outcome: the official listing, access that works, no illegal scrape.
Access is opened before coding
Without the right portal subscription, nothing works. We validate access up front: weeks of debugging avoided.
We search, we do not download everything
The product queries and follows updates. Paginating the whole base every ten minutes is not a product.
Old Pôle emploi URLs are cleaned up
A legacy host can still answer and hide debt. We move to francetravail before it breaks silently.
Listings ≠ a claimant's status
Listings go through a developer account. A user's status is API Particulier with accreditation. We do not mix the two.
How we ship your France Travail connector
Scoping
Offers, ROME, labour market: which APIs, which scopes, which redistribution. We subscribe before writing the client.
Development
OAuth client with a token cache, secrets in a vault, a limiter, local storage of offers already seen, ROME mapping by code.
Acceptance testing
invalid_client without a subscription, missing scopes, replay on your ROME codes / départements, cache fallback if the API drops.
Monitoring
401 / 429 alerts, freshness of the offer cache, token expiry. The careers site does not empty if FT is down.
What the France Travail API allows
- Offers search v2
- Filters on occupations, municipalities, départements, contract types. Offers collected by France Travail and consenting partners.
- Offer detail and reference data
- One offer, places, contracts, occupations, training, sectors. Enough to prefill a job sheet, not enough to dump the base.
- ROME 4.0
- Four APIs: skills, occupations, work contexts, occupation sheets. The reference OPCOs no longer recode by hand.
- Labour market
- Jobseekers, offers, hires, tightness, offered wages. Sources FT, ACOSS, CCMSA, DARES. Quarterly update.
The vocabulary of the France Travail API
- Subscription
- The application must be subscribed to each API. Without that, invalid_client. Same reflex as PISTE or the Météo-France portal: an empty account does nothing.
- o2dsoffre / api_offresdemploiv2
- Example of offers scopes. A missing scope = token refused or 403. Each API has its own, composed at scoping.
- ROME 4.0
- Occupation / skills reference (March 2023). Four APIs. The occupation code is stored, the label is displayed.
- dateActualisation
- The field used to reread only the delta. Without it, you re-download what you already have. With ~500,000 offers / day on the site, the connector searches, it does not dump.
- francetravail.io
- The current portal. api.emploi-store.fr and pole-emploi.fr paths in business code are suspect. A PE token that still answers is a trap.
- invalid_client
- Symptom number one: id/secret are right, subscription is missing. Documented in five minutes on the portal, not in three days of logs.
The real constraints of the France Travail API
2024 rename: Pôle emploi → France Travail
Hosts, scopes, docs. Any api.emploi-store.fr snippet is debt. A PE token that still answers is worse than a 404: the code looks healthy.
Subscribing is not creating an app
Without a subscription, invalid_client. Same mechanic as Météo-France and PISTE. We check it at scoping, not in client UAT.
This is not an allottee's status
Offers = a developer account. A person's jobseeker status = API Particulier, DataPass. A job board does not need the second; a CCAS does not need the first.
No webhook, so a poll under quota
Ceilings are read in the portal after an account. We do not publish a third-party figure. A limiter, 429 backoff, cache, a clear User-Agent.
France Travail Offers API or API Particulier?
Two « France Travail » in search engines. One is a job board, the other a social procedure.
| Criterion | France Travail OffersOfficial job board | API ParticulierA user's status |
|---|---|---|
| Subject | Public job offers | An allottee's status and payments |
| Access | Dev account, subscription | DataPass, public-service mission |
| Open-ish | Yes, after an account | No, authorisation |
| Host | api.francetravail.io | particulier.api.gouv.fr |
| Auth | OAuth2 client_credentials | JWT Bearer |
| Front end | Server token, not in a SPA | Forbidden, CORS refused |
| The right case | Careers site, ATS, OPCO | CCAS, social pricing |
We combine them only if the product truly has both needs. Otherwise we pick one, and we stop merging them in the same quote.
What we measure on a France Travail integration
The other public APIs
The bricks we most often wire up alongside, once Offers is scoped.
France TravailWe build your France Travail connectorThis page
API AdresseNormalise the offer or candidate place, INSEE code included.
Météo FranceUnrelated to offers: another portal, another secret.
URSSAFTerritorial open data, complementary to the labour market, not an offer feed.
SNCF & transportWe build your SNCF connector
API ParticulierWe build your API Particulier connector
DVF & cadastreWe build your DVF and cadastre connector
LegifranceWe build your Légifrance connector
API GéoWe build your API Géo connectorWe combine France Travail with
The stack around offers on our projects.
France Travail integration: your questions
An account on francetravail.io, an application, a subscription to each useful API, OAuth2 client_credentials on entreprise.francetravail.fr (grant_type, client_id, client_secret, scope). Cache the token from expires_in, secrets in a vault, one sandbox / prod app. Then search a perimeter (ROME, département), store offers already seen, reread the delta. A clear User-Agent, a limiter calibrated on the portal quota, 429 backoff. If the API drops, we do not empty the careers-site cache.
Almost always: the application is not subscribed to the API, or a scope is missing (api_offresdemploiv2, o2dsoffre, and so on). The keys can be right. That is bug number one, documented in five minutes on the portal. The second trap is a host still on pole-emploi.fr: it answers, so nobody migrates. We check it at scoping, on the portal, before writing the OAuth client. That avoids three days of logs for an unticked box.
The Offers API exposes public ads, with a developer account. API Particulier exposes an allottee's status, under DataPass, for a social procedure. One feeds a job board; the other a CCAS file. Mixing them in the same connector is a pre-sales error, not a technical shortcut. An ATS does not need allottee status; a CCAS does not need the offer feed. We pick one, we do not merge the quote. Mixing them in one quote is the pre-sales error this page exists to stop.
About 500,000 offers online a day: you do not « download the base ». You search a perimeter, paginate with care, store what you have already seen. No documented webhook, so a poll under the portal quota. A bulk extract is a scoping discussion; it is not the default of a territorial widget. Redistribution terms for partner offers are in the portal terms: not every offer has the same republication right.
Partner access is free after an account. The cost is the connector: OAuth, subscriptions, cache, delta, ROME, redistribution terms. An offers widget on three départements is a short job. An ATS that republishes partner offers, plus ROME and the labour market, is a project. We scope the perimeter and give a firm estimate before we start. Versioned subscription (sandbox / prod) and ROME mapping by code are part of the deliverable, not an option.
A France Travail integration project?
Let's talk. 30 minutes to scope offers, ROME or the labour market, check the subscription, and tell you frankly what is feasible.
Discuss my France Travail project