---
title: "Envoie un lien magique RGPD self-service au candidat (24h)."
method: POST
path: "/api/v1/recrutement/public/candidate-magic-link"
tags: ["Recrutement / ATS (V2)"]
---

# Envoie un lien magique RGPD self-service au candidat (24h).

`POST /api/v1/recrutement/public/candidate-magic-link`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/recrutement/public/candidate-magic-link`
- Auth: none declared

Envoie un lien magique RGPD self-service au candidat (24h).

    Anti-énumération : retourne TOUJOURS 200 même si email inconnu. Cela
    empêche un attaquant de découvrir quels emails sont en base via timing
    ou message différentiel.

    Le candidat existe dans une ou plusieurs orgs. On envoie un magic-link
    pour la rangée la plus récente (toutes orgs confondues). Si plusieurs
    orgs ont le candidat, V2 implémentera un sélecteur d'org.

## Request body

- MagicLinkRequest
  - `email` string, email, required
  - `website` string, nullable

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `201`: Ressource créée. ID dans `data.id`.
- `400`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `409`: État incohérent (email dupliqué, ressource déjà dans cet état, etc.).
- `422`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
