
# Rejoindre une organisation suggérée

`POST /fapi/v1/me/organization-suggestions/{domain_id}:join` · appelé depuis l'hôte de connexion de l'environnement

Accepte une suggestion issue de [Lister mes suggestions d'organisation](/docs/api/fapi/me/organization-suggestions/list) : l'utilisateur authentifié devient membre de l'organisation suggérée avec le rôle de membre par défaut de l'environnement. La source de l'adhésion est `domain_capture` et l'utilisateur est enregistré comme auteur de l'action ; un événement `organization_membership.created` est envoyé. En cas de deux adhésions simultanées, une seule réussit. L'adhésion ne nécessite pas de session récemment vérifiée : elle n'accorde que le rôle de membre par défaut, et uniquement pour un domaine dont l'adresse e-mail a été vérifiée par l'utilisateur. Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié ; si le cookie est absent, expiré ou révoqué, renvoie `401 unauthenticated`. Une application de première partie sur une autre origine peut à la place envoyer son jeton d'accès à l'API front (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès à l'API front](/docs/api/fapi/front-api-token)).

Avec `@keenauth/js` : `await keenauth.organizations.joinSuggestion(id)`.

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |
| `Origin` | oui | Doit être exactement `https://<hôte de connexion>`. |

`domain_id` : l'`id` de la suggestion (`odm_…`).

Aucun corps (un objet JSON vide est accepté).

## Réponse

`200 OK` avec `{"membership_id": "mem_…", "organization_id": "org_…"}`.

## Erreurs

| Statut | Code | Quand |
| --- | --- | --- |
| 401 | `unauthenticated` | Aucun cookie de session ni jeton d'accès à l'API front valide. |
| 403 | `origin_not_allowed` | `Origin` est absent ou incorrect. |
| 403 | `role_not_assignable` | Le rôle de membre par défaut ne peut pas être accordé par capture de domaine. |
| 403 | `user_not_active` | L'utilisateur n'est pas actif. |
| 404 | `not_found` | Le domaine n'est pas une suggestion pour cet utilisateur (inconnu, mal formé, pas en mode `suggest`, sans adresse e-mail vérifiée dans ce domaine, ou ignoré trois fois). |
| 409 | `membership_already_exists` | L'utilisateur est déjà membre de l'organisation. |
| 409 | `organization_disabled` | L'organisation est désactivée ou en cours de suppression. |
| 409 | `membership_limit_reached` | L'utilisateur a atteint sa limite d'adhésions. |
| 409 | `organization_membership_limit_reached` | L'organisation a atteint sa limite de membres. |
| 503 | `temporarily_unavailable` | L'annuaire des adhésions n'a pas répondu ; réessayez plus tard. |

## Exemple

```bash
curl -X POST https://example.keenauth.app/fapi/v1/me/organization-suggestions/odm_01j9a5c4000000000000000001:join \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -b cookies.txt
```

```json
{
  "membership_id": "mem_01j9yyyyyyyyyyyyyyyyyyyyyy",
  "organization_id": "org_01j9xxxxxxxxxxxxxxxxxxxxxx"
}
```

## Données personnelles

Cet point d'accès traite des données personnelles : adhésions et invitations aux organisations. [Données personnelles dans les API KeenAuth](/docs/policies/personal-data) décrit ce qui est stocké, la durée de conservation et la manière dont elles sont supprimées. N'envoyez pas de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.
