> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.client-p.pylote.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Whitelister plusieurs recruteurs en une seule requete

> **A utiliser pour l'onboarding initial** : whitelister tous vos recruteurs existants
d'un coup, plutot que de faire N appels a `POST /partners/whitelist`.

Pour les nouveaux recruteurs ajoutes par la suite, utilisez l'endpoint unitaire `POST /partners/whitelist`.

Le traitement est partiel : un recruteur en erreur ne fait pas echouer les autres.
Le tableau `results` contient une entree par recruteur soumis, avec `whitelistedEmail`
en cas de succes (ou si deja whiteliste) ou `error` en cas d'echec.

Limite : 500 recruteurs par appel.




## OpenAPI

````yaml /openapi.yaml post /partners/whitelist/batch
openapi: 3.1.0
info:
  title: Pylote Client API
  version: 1.0.4
  description: >
    API de distribution des profils freelances Pylote.


    Permet aux clients (recruteurs, integrateurs, partenaires) de recuperer

    les freelances depuis la base Pylote, gerer les whitelist recruteurs

    et tracker les consultations de profils.


    Les profils sont retournes au format [JSON
    Resume](https://jsonresume.org/schema/)

    enrichi avec les metadonnees Pylote (disponibilite, TJM, mobilites,
    competences).


    ## Engagements clients


    En utilisant cette API, vous vous engagez a :

    1. **Tracker les consultations** de profils via `POST
    /partners/{slug}/events` (contractuel)

    2. **Supprimer les profils** dont le `status` est `deleted` de votre base

    3. **Ne jamais exposer** les emails personnels des freelances (utiliser les
    emails proxy Pylote)


    ## Protection des donnees


    Les donnees sont transformees avant distribution :

    - Les emails personnels sont remplaces par des **emails proxy**
    (`@freelance.pylote.io`)

    - Le champ `personalEmail` est un **hash SHA-256** (pour dedoublonnage,
    jamais l'email en clair)

    - Les URLs LinkedIn et CV passent par `hive.pylote.io` (tracking watermarke)

    - Les identifiants (`meta.id`) sont **chiffres** (AES-256-CBC) et opaques
  contact:
    name: Pylote
    url: https://pylote.io
    email: contact@pylote.io
servers:
  - url: https://client-p.pylote.io
    description: Production
  - url: https://client-pp.pylote.io
    description: Preprod
security:
  - apiKey: []
tags:
  - name: Freelances
    description: >
      Endpoints principaux pour recuperer les profils freelances.

      Les profils sont au format JSON Resume enrichi avec les metadonnees
      Pylote.
  - name: Partners
    description: >
      Endpoints pour les partenaires de distribution (ex: Agrega).

      Gestion de la whitelist recruteurs et **tracking obligatoire** des
      consultations de profils.
  - name: Integration
    description: |
      Endpoints pour les integrateurs (ex: BoondManager).
      Gestion des sous-clients et de leurs whitelist recruteurs.
  - name: Sandbox
    description: >
      Endpoints de test avec donnees anonymisees. Aucune cle API requise.

      Utilisez la sandbox pour valider votre integration avant de passer en
      production.
  - name: Admin
    description: >-
      Endpoints d'administration (cache, debug). Requiert un flag admin sur la
      cle API.
  - name: Health
    description: Health check de l'API et de ses dependances externes
paths:
  /partners/whitelist/batch:
    post:
      tags:
        - Partners
      summary: Whitelister plusieurs recruteurs en une seule requete
      description: >
        **A utiliser pour l'onboarding initial** : whitelister tous vos
        recruteurs existants

        d'un coup, plutot que de faire N appels a `POST /partners/whitelist`.


        Pour les nouveaux recruteurs ajoutes par la suite, utilisez l'endpoint
        unitaire `POST /partners/whitelist`.


        Le traitement est partiel : un recruteur en erreur ne fait pas echouer
        les autres.

        Le tableau `results` contient une entree par recruteur soumis, avec
        `whitelistedEmail`

        en cas de succes (ou si deja whiteliste) ou `error` en cas d'echec.


        Limite : 500 recruteurs par appel.
      operationId: addToPartnerWhitelistBatch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - recruiters
              properties:
                recruiters:
                  type: array
                  maxItems: 500
                  items:
                    type: object
                    required:
                      - recruiterEmail
                      - firstname
                      - lastname
                      - company
                    properties:
                      recruiterEmail:
                        type: string
                        example: marie.gilles@lutessa.com
                      firstname:
                        type: string
                        example: Marie
                      lastname:
                        type: string
                        example: Gilles
                      company:
                        type: string
                        description: Entreprise du recruteur (pas la votre)
                        example: Lutessa
      responses:
        '201':
          description: Resultat par recruteur (succes partiel possible)
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        recruiterEmail:
                          type: string
                          example: marie.gilles@lutessa.com
                        whitelistedEmail:
                          type: string
                          description: Email proxy genere (present en cas de succes)
                          example: lutessa.marieg@recruiter.pylote.io
                        error:
                          type: string
                          description: >-
                            Message d'erreur si le recruteur n'a pas pu etre
                            whiteliste
        '400':
          description: Body invalide (array vide, > 500, ou champs manquants)
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >
        Cle API fournie par Pylote. Inclure dans le header `x-api-key` de chaque
        requete.


        Exemple : `x-api-key: votre-cle-api`

````