Skip to content

Case study · Corporate

International corporate website on Drupal: REST API (OpenAPI) and integration of a recruitment ATS

How we connect a Drupal website to a recruitment ATS and expose a documented REST API — content modelling, synchronisation and multilingual support, under white label.

Role: Design, development & integrations — subcontracted Client: An international private-sector group (anonymised)
OpenAPIdocumented, versioned REST API
0re-keying — jobs synchronised from the ATS
Multimultilingual content & API
Autoscheduled data synchronisation
Role
Design, development & integrations — subcontracted
End client
An international private-sector group (anonymised)
Technical foundation
Drupal 10 · PHP 8 · API REST / OpenAPI
Scope
Content modelling, ATS integration (job synchronisation), documented REST API, profile import, multilingual, emailing, ongoing maintenance
Drupal 10REST APIOpenAPITalentSoft (ATS)MultilingualEmailing (Mailify)PHP 8GitLab CI
In short: for a large international private-sector group, we designed a Drupal website (outside the DSFR) built to communicate with other systems: a custom content model (job offers, team profiles, group entities), automatic synchronisation of job offers from a recruitment ATS (TalentSoft), and a REST API documented in OpenAPI to expose this data cleanly. All of it multilingual, with an emailing integration. Role: design, development and integrations, as a subcontractor.

The need: a website that talks to other systems

For an international group, a corporate website is not an island: it has to display job offers that live in HR software, present teams and entities maintained elsewhere, and sometimes expose all of this to other applications. The real issue is therefore not “making pages”, but making data flow cleanly — with no double entry, no copy and paste, and no divergence between the website and the source systems. It is integration work, and that is where the value lies.

Modelling the right content

Before any integration, you need the right content model. We structured three business building blocks: job offers (with their taxonomies — roles, locations, contract types), team profiles, and group entities (business units). Each block has its own fields, relationships and rules. A clean model upstream is what makes the integration and the API predictable afterwards — rather than a pile of fields improvised as needs arise.

Integrating the recruitment ATS: a synchronisation, not copy and paste

Job offers are not entered in Drupal: they live in a recruitment ATS (TalentSoft). We developed a scheduled synchronisation — a command run as a background task — that queries the source, creates or updates the corresponding offers in Drupal (upsert), and automatically removes offers that have become obsolete. The result: the website is always up to date, nobody re-keys a job advert by hand, and the ATS remains the single source of truth. The same logic is used to import team profiles. It is a robust, traceable and replayable integration — not a one-off import.

Exposing a documented REST API (OpenAPI)

Once the data is clean in Drupal, it has to be possible to redistribute it. We built a custom REST API exposing the business resources — list and detail of job offers, their taxonomies and vocabularies, the group entities — with automatically generated OpenAPI documentation. Technically: dedicated REST resources, param converters to resolve entities cleanly from the URL, and an event subscriber to control API routing. The benefit for an agency: this API is documented, versionable and consumable — by the website’s front end, a third-party application or a future project — instead of being logic buried in templates.

Multilingual from end to end

An international group speaks several languages, and multilingual support does not stop at editorial content: it runs through the model, the interface and the API. Content is translated and served per language, including through the API endpoints. This is what makes it possible to feed localised interfaces without duplicating logic — one foundation, several markets.

Emailing and relationships

Beyond content, the website triggers communications. We integrated an emailing solution (Mailify) to connect forms and journeys to the group’s relationship tool, with sending controlled on the server side. Here again, the rule is the same: the website does not reinvent a tool, it integrates with the one that already has authority.

Performance and robustness, without having to think about it

An integration is only valuable if it holds up under load and stays smooth. The foundation includes fine-grained cache management (suitable cache contexts, including the mobile / desktop distinction), user-experience details such as reading time, and the usual quality chain — tooled code review, continuous integration — so that changes do not introduce regressions. It is not the selling point of the project, but it is what keeps it running without surprises.

Taking over or developing an API integration

This is the point that speaks to an agency: a website full of integrations is daunting to take over — unless it is built properly. Here, everything is readable and documented: the content model is explicit, the synchronisation is an isolated, replayable command, the API is described in OpenAPI, and quality is tooled. We know how to audit an existing integration, understand the flow between the source system and Drupal, and extend it — add a resource to the API, plug in a new source, open a new language — without taking everything apart.

Frequently asked questions

Why synchronise from an ATS rather than entering offers in the website?

To keep a single source of truth. Recruiters work in the ATS; the website synchronises with it automatically (creating, updating and removing expired offers). Nobody re-keys anything, and the website never diverges from the HR tool.

What is the point of a REST API documented in OpenAPI on a corporate website?

To redistribute data cleanly: feeding the front end, a mobile application or a partner, without exposing the internal logic. The OpenAPI documentation makes the API understandable and consumable by any team, and makes it easier to take over.

Can another source or a new language be added later?

Yes. The synchronisation is isolated in a dedicated command and the content model is explicit: adding a source, an API resource or a language is done by extension, not by rewriting.

Do you work under white label for agencies?

Yes. We work as subcontractors on demanding Drupal projects — modelling, third-party API integrations, REST APIs, multilingual sites, takeovers and maintenance — under your brand.

In short: this project is not “just another website”: it is an integration platform. The value is in the flow — data that comes from an ATS, is organised in a clean model, and goes back out through a documented API, all multilingual and maintainable. It is exactly the kind of “connected” Drupal project an agency looks to delegate.

5REST API resources documented in OpenAPI (offers, taxonomies, entities)
0re-keying of offers — scheduled synchronisation from the ATS
Multimultilingual content and API, one foundation
f
FullDo

Full-stack & AI web development studio — Drupal, WordPress, accessibility.