> ## 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.

# Retrieve a full profile (Stage 2)

> Returns a freelancer's full profile (JSON Resume format, identical to
`GET /freelances`) from the `id` obtained at Stage 1.

- `recruiterEmail` is **required** and must be in your whitelist: this is
  what lets the freelancer see "{company} via {partner}" in their stats.
- The `profile_view` event is emitted **automatically** on Pylote's side:
  no need to call `POST /partners/events` for the view itself (keep it
  for granular actions: click_cv, add_favorite, etc.).
- Contact goes through the Pylote proxy email and the tracked LinkedIn
  link. Phone numbers are not exposed through the partner channel.
- An `opt_out` recruiter cannot reveal a profile (403): a reveal exposes
  contact details, which requires tracking (see Tracking obligations).




## OpenAPI

````yaml /openapi.yaml post /partners/reveal
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/reveal:
    post:
      tags:
        - Partners
      summary: Retrieve a full profile (Stage 2)
      description: >
        Returns a freelancer's full profile (JSON Resume format, identical to

        `GET /freelances`) from the `id` obtained at Stage 1.


        - `recruiterEmail` is **required** and must be in your whitelist: this
        is
          what lets the freelancer see "{company} via {partner}" in their stats.
        - The `profile_view` event is emitted **automatically** on Pylote's
        side:
          no need to call `POST /partners/events` for the view itself (keep it
          for granular actions: click_cv, add_favorite, etc.).
        - Contact goes through the Pylote proxy email and the tracked LinkedIn
          link. Phone numbers are not exposed through the partner channel.
        - An `opt_out` recruiter cannot reveal a profile (403): a reveal exposes
          contact details, which requires tracking (see Tracking obligations).
      operationId: partnerReveal
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - freelanceId
                - recruiterEmail
              properties:
                freelanceId:
                  type: string
                  format: uuid
                  description: The `id` field returned by `POST /partners/search`
                  example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                recruiterEmail:
                  type: string
                  description: Email reel du recruteur (doit etre dans la whitelist)
                  example: marie.gilles@lutessa.com
      responses:
        '200':
          description: Full profile in JSON Resume format (same schema as GET /freelances)
        '401':
          description: Cle API manquante
        '403':
          description: Invalid API key, wrong scope, or opt_out recruiter
        '404':
          description: Recruiter not in the whitelist, or freelance not found
        '429':
          description: Rate limit depasse (120 requetes/minute par cle API)
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`

````