Interiware

Tapez quelques lettres — par exemple « Swissdec », « QR-facture », « nLPD ».

Développeurs · API Candidats v1

API d'import de candidats

Comment un logiciel tiers se connecte à SAM ULTIMATE pour y créer des candidats et joindre leurs documents : authentification, enchaînement des appels et structures de données échangées.

Version 1.0.0 · OpenAPI 3.1 · base /external/candidate/v1Spécification OpenAPI (JSON)

Objet

Ce document décrit comment un logiciel tiers se connecte à SAM ULTIMATE pour y importer des candidats et leurs documents. Il présente l'authentification, l'enchaînement des appels et les structures de données échangées.

Les adresses des serveurs (authentification et API), ainsi que vos identifiants de connexion, vous sont communiqués séparément par Interiware.

Cas d'utilisation métiers

Trois façons concrètes d'alimenter votre vivier sans ressaisie. Dans chaque cas, le candidat et son CV arrivent dans SAM ULTIMATE en quelques secondes, et le CV est analysé par l'intelligence artificielle lorsque l'option d'analyse de CV est active.

Cas 1

Le candidat postule depuis votre site carrière

Votre site web propose un formulaire de candidature spontanée ou une réponse à une annonce, avec dépôt du CV.

  1. Le candidat remplit le formulaire et dépose son CV sur votre site.

  2. Votre site crée la fiche candidat : identité, coordonnées, profession choisie dans la liste des professions.

    POST /external/candidate/v1
  3. Il joint le CV dans la catégorie CV.

    POST /external/candidate/v1/{id}/documents
  4. SAM ULTIMATE analyse le CV et crée le profil : résumé, compétences, expériences, formations, langues avec niveau, permis.

  5. Le matching exploite toutes les informations du CV : le candidat remonte sur les commandes ouvertes avec un score de pertinence.

  6. Depuis la fiche, le conseiller compose le dossier de candidature - fiche descriptive sur le modèle de l'agence, pièces cochées, note - et l'envoie en quelques clics aux clients suggérés par profession.

Résultat : Zéro ressaisie côté agence. Le candidat est visible dans SAM ULTIMATE avant même que le conseiller ait ouvert sa messagerie, et proposable aux clients le jour même.

Cas 2

Vous sélectionnez un profil depuis votre ATS ou votre intranet

Vous sourcez dans un outil tiers : ATS, intranet groupe, base de talents partagée. Seuls les profils retenus doivent rejoindre SAM ULTIMATE.

  1. Un recruteur repère un profil dans votre outil et clique sur « Envoyer vers SAM ULTIMATE ».

  2. Votre connecteur crée le candidat dans la gestion visée, rattaché à l'agence et au conseiller (agenceId, advisorId).

    POST /external/candidate/v1
  3. Il transmet le CV et, s'il y a lieu, les diplômes ou certificats, chacun dans sa catégorie.

    POST /external/candidate/v1/{id}/documents
  4. Le CV rejoint la CV-thèque et est analysé ; le profil structuré entre aussitôt dans le matching, qui utilise toutes les informations du CV.

  5. En quelques clics, le dossier candidat part vers tous les clients potentiellement intéressés. Le conseiller enchaîne ensuite : mission, contrat, heures, salaire.

Résultat : Votre outil de sourcing reste la vitrine, SAM ULTIMATE reste le système de gestion. Les deux ne se contredisent jamais.

Cas 3

Inscription sur un salon ou lors d'une journée de recrutement

Sur un stand, une tablette ou un QR code remplace la pile de CV papier et le tableur du lendemain.

  1. Le candidat s'inscrit sur la tablette ou scanne le QR code du stand : nom, téléphone, profession, photo de son CV.

  2. L'application crée le candidat en direct, avec une note d'import identifiant le salon (webimpnote).

    POST /external/candidate/v1
  3. La photo ou le PDF du CV est joint ; la reconnaissance de texte prend le relais pour un scan papier.

    POST /external/candidate/v1/{id}/documents
  4. Dès le retour à l'agence, tous les profils du salon sont dans le vivier, analysés, filtrables par la note d'import et déjà proposables aux clients en quelques clics.

Résultat : Un salon se solde par des profils exploitables le soir même, pas par une semaine de saisie.

Authentification

L'API utilise le standard OpenID Connect (OAuth 2.0), avec le flux client credentials : votre logiciel échange ses identifiants contre un jeton d'accès, puis présente ce jeton à chaque appel.

A. Obtenir un jeton d'accès

Envoyez une requête POST vers l'endpoint de jeton du serveur d'authentification, au format application/x-www-form-urlencoded :

POST {serveur d'authentification}/auth/realms/SAM/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=YOUR_LOGIN&client_secret=YOUR_PASSWORD

La réponse contient le jeton dans le champ access_token, ainsi que sa durée de validité en secondes (expires_in). Demandez un nouveau jeton lorsqu'il arrive à expiration.

B. En-têtes à envoyer à chaque appel

En-têteValeur
AuthorizationBearer {access_token}
X-SUBTENANT-IDIdentifiant de la gestion (agence) cible, communiqué par Interiware. Obligatoire sur tous les appels.

Parcours d'intégration

Nous recommandons l'enchaînement suivant :

  1. Tester la connexion

    Appelez GET /external/candidate/v1/ping. Une réponse 200 confirme que le jeton et l'en-tête X-SUBTENANT-ID sont acceptés.

  2. Charger les valeurs de référence

    Récupérez la liste des professions (GET /external/candidate/v1/occupations) et, si vous envoyez des documents, la liste des catégories (GET /external/candidate/v1/document-categories). Faites-le avant tout import : un candidat doit référencer au moins une profession existante.

  3. Créer le candidat

    POST /external/candidate/v1. La réponse renvoie le candidat créé ; conservez son id.

  4. Joindre les documents

    Pour chaque fichier, POST /external/candidate/v1/{id}/documents?category={code}, où {id} est l'identifiant du candidat et {code} une catégorie dont le parentType vaut EMPLOYEE. Un document déposé dans la catégorie CV est analysé comme un CV chargé directement dans SAM ULTIMATE, lorsque l'analyse de CV est activée pour votre gestion.

Endpoints

Les chemins ci-dessous sont relatifs à l'adresse de l'API qui vous a été communiquée. Cliquez sur un endpoint pour en voir le détail.

GET/external/candidate/v1/pingTest de connexion

Renvoie 200 si le jeton et l'en-tête X-SUBTENANT-ID sont acceptés.

Paramètres

NomEmplacementTypeDescription
X-SUBTENANT-ID*en-têtestringSub-tenant identifier

Réponses

CodeDescriptionContenu
200OK*/* · string
GET/external/candidate/v1/occupationsListe des professions

Référentiel des professions de la gestion. Un candidat doit référencer au moins une profession par son id. Privilégiez les professions actives.

Paramètres

NomEmplacementTypeDescription
X-SUBTENANT-ID*en-têtestringSub-tenant identifier

Réponses

CodeDescriptionContenu
200OK*/* · Occupation[]
POST/external/candidate/v1Créer un candidat

Crée une fiche candidat. La réponse renvoie le candidat créé, avec l'id attribué par SAM ULTIMATE à reporter dans les appels suivants.

Paramètres

NomEmplacementTypeDescription
X-SUBTENANT-ID*en-têtestringSub-tenant identifier

Corps de la requête*application/json

Type : CandidateChamps obligatoires : firstName, gender, lastName, occupationIds

Réponses

CodeDescriptionContenu
200OK*/* · Candidate
GET/external/candidate/v1/document-categoriesCatégories de documents

Les catégories sous lesquelles un document de candidat peut être classé. Pour un candidat, le parentType vaut EMPLOYEE.

Paramètres

NomEmplacementTypeDescription
X-SUBTENANT-ID*en-têtestringSub-tenant identifier

Réponses

CodeDescriptionContenu
200OK*/* · DocumentCategory[]
POST/external/candidate/v1/{id}/documentsJoindre un document à un candidat

Envoi multipart/form-data, champ file. Un document de catégorie CV est analysé comme un CV chargé directement dans SAM ULTIMATE, lorsque l'analyse de CV est activée.

Paramètres

NomEmplacementTypeDescription
id*cheminstringID of the candidate
category*querystringCode of a category from /document-categories
X-SUBTENANT-ID*en-têtestringSub-tenant identifier

Corps de la requêtemultipart/form-data

ChampTypeContraintesDescription
file*string (binary)fichierFile to upload

Réponses

CodeDescriptionContenu
200OK*/* · Document

Un candidat est enregistré dans SAM ULTIMATE comme une fiche employé : les catégories renvoyées par /document-categories sont donc celles des documents d'employé (parentType = EMPLOYEE).

Modèles de données

Les longueurs indiquées sont des maximums. Les champs marqués d'un astérisque sont obligatoires.

CandidateobjectChamps obligatoires : firstName, gender, lastName, occupationIds
ChampTypeContraintesDescription
idstringIdentifiant attribué par SAM ULTIMATE (renvoyé à la création, à ne pas fournir).
agenceIdstringAgence de rattachement (identifiant communiqué par Interiware).
advisorIdstringConseiller de rattachement (identifiant communiqué par Interiware).
gender*enumCivilité.
  • FEMALE – Femme
  • MALE – Homme
firstName*string60 caractères max.Prénom.
lastName*string60 caractères max.Nom.
addressAddressAdresse postale.
phonestring20 caractères max.Téléphone fixe.
mobilestring20 caractères max.Téléphone mobile.
emailstring50 caractères max., format : ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$|^\s*$Adresse e-mail valide.
avsNumberstring16 caractères max.Numéro AVS, format 756.XXXX.XXXX.XX.
nationalitystring3 caractères max.Nationalité, code pays ISO (ex. CH).
birthDatestring (date)date (AAAA-MM-JJ)Date de naissance.
birthPlacestring30 caractères max.Lieu de naissance.
workPermitTypeenumType de permis de travail.
  • SHORT_TERM_L – Permis L – courte durée
  • ANNUAL_B – Permis B – annuel
  • SETTLED_C – Permis C – établissement
  • CROSS_BORDER_G – Permis G – frontalier
  • ASYLUM_SEEKER_N – Permis N – requérant d'asile
  • NEED_FOR_PROTECTION_S – Permis S – personne à protéger
  • NOTIFICATION_PROCEDURE_FOR_SHORTTERM_WORK_90_DAYS – Procédure d'annonce – 90 jours
  • NOTIFICATION_PROCEDURE_FOR_SHORTTERM_WORK_120_DAYS – Procédure d'annonce – 120 jours
  • PROVISIONALLY_ADMITTED_FOREIGNERS_F – Permis F – admission provisoire
  • RESIDENT_FOREIGN_NATIONAL_WITH_GAINFUL_EMPLOYMENT_CI – Permis Ci – activité lucrative
  • OTHERS_NOT_SWISS – Autres (non suisses)
partnerNationalitystring3 caractères max.Nationalité du conjoint, code pays ISO.
partnerWorksInCHbooleanLe conjoint travaille en Suisse.
numberOfChildreninteger (int32)entierNombre d'enfants.
primaryMotherTonguestringLangue maternelle principale (code langue communiqué par Interiware).
secondaryMotherTonguestringSeconde langue maternelle (même référentiel).
ownsCarbooleanPossède une voiture.
ownsMotorbikebooleanPossède une moto.
ownsBicyclebooleanPossède un vélo.
hasCarLicensebooleanPermis voiture.
hasMotorbikeLicensebooleanPermis moto.
hasHeavyVehicleLicensebooleanPermis poids lourd.
hasTrailerLicensebooleanPermis remorque.
hasConstructionMachineLicensebooleanPermis machines de chantier.
commentstringCommentaire libre.
evaluationCommentstringCommentaire d'évaluation.
webimpnotestringNote d'import.
occupationIds*string[]au moins 1 élémentIdentifiants de professions issus de /occupations.
AddressobjectAucun champ obligatoire
ChampTypeContraintesDescription
line1string50 caractères max.Ligne d'adresse 1.
line2string50 caractères max.Ligne d'adresse 2.
line3string50 caractères max.Ligne d'adresse 3.
postalCodestring8 caractères max.Code postal (NPA).
citystring30 caractères max.Localité.
countrystring3 caractères max.Pays, code ISO (ex. CH).
OccupationobjectAucun champ obligatoire
ChampTypeContraintesDescription
idstringIdentifiant à reporter dans occupationIds.
nameFrstringLibellé en français.
nameDestringLibellé en allemand.
activebooleanProfession active. Privilégiez les professions actives.
suvaMappedbooleanProfession rattachée à la nomenclature SUVA.
DocumentCategoryobjectAucun champ obligatoire
ChampTypeContraintesDescription
codestringCode à passer dans le paramètre category de l'envoi.
parentTypeenumType d'entité concernée. Pour un candidat : EMPLOYEE.
  • EMPLOYEE – Employé (candidat)
  • MISSION
  • SALARIED_EMPLOYEE
  • CLIENT
  • DEBTOR
  • BOOKING
  • PERMANENT_ASSIGNMENT
  • TEMPORARY_ASSIGNMENT
  • CCT
  • BANK_TRANSFER_ORDER
  • WORK_REPORT
descriptionstringLibellé de la catégorie.
DocumentobjectAucun champ obligatoire
ChampTypeContraintesDescription
idstringIdentifiant du document.
lastModifiedBystringAuteur de la dernière modification.
dateTrackstring (date-time)date et heure (ISO 8601)Date de dernière modification.
deletedbooleanDocument supprimé.
entityTypeenumEntité à laquelle le document est rattaché (EMPLOYEE pour un candidat).
  • EMPLOYEE – Employé (candidat)
  • MISSION
  • SALARIED_EMPLOYEE
  • CLIENT
  • DEBTOR
  • BOOKING
  • PERMANENT_ASSIGNMENT
  • TEMPORARY_ASSIGNMENT
  • CCT
  • BANK_TRANSFER_ORDER
  • WORK_REPORT
entityIdstringIdentifiant de cette entité (id du candidat).
categoryCodestringCatégorie du document.
descriptionstringDescription.
fileNamestringNom du fichier.
contentTypestringType MIME du fichier.
documentIdstringIdentifiant du fichier stocké.

Exemple de création de candidat

Requête minimale réaliste : identité, coordonnées, adresse et au moins une profession.

POST /external/candidate/v1
Authorization: Bearer {access_token}
X-SUBTENANT-ID: {identifiant de la gestion}
Content-Type: application/json

{
  "gender": "FEMALE",
  "firstName": "Anna",
  "lastName": "Exemple",
  "email": "anna.exemple@example.com",
  "mobile": "+41 79 000 00 00",
  "birthDate": "1990-05-14",
  "nationality": "CH",
  "address": {
    "line1": "Rue de l'Exemple 1",
    "postalCode": "1000",
    "city": "Lausanne",
    "country": "CH"
  },
  "occupationIds": ["{id issu de /occupations}"]
}

Documentation interactive et support

L'interface Swagger de l'API Candidats reprend l'ensemble de ces informations et permet de tester les appels. Son adresse vous est communiquée avec vos identifiants.

Pour toute question technique, écrivez à support@interiware.com.

Télécharger la spécification OpenAPI (JSON)