
# Unirse a una organización sugerida

`POST /fapi/v1/me/organization-suggestions/{domain_id}:join` · llamado desde el host de inicio de sesión del entorno

Acepta una sugerencia de [Listar mis sugerencias de organización](/docs/api/fapi/me/organization-suggestions/list): el usuario autenticado pasa a ser miembro de la organización sugerida con el rol de miembro predeterminado del entorno. El origen de la membresía es `domain_capture` y el usuario queda registrado como actor; se envía un evento `organization_membership.created`. De dos uniones simultáneas, solo una tiene éxito. Unirse no requiere una sesión verificada recientemente: solo concede el rol de miembro predeterminado, y únicamente para un dominio cuya dirección de correo electrónico el usuario haya verificado. Requiere la cookie `__Host-idp_session` del usuario autenticado; si la cookie falta, ha caducado o ha sido revocada, devuelve `401 unauthenticated`. Una aplicación de primera parte en otro origen puede enviar en su lugar su token de acceso de la API frontal (`Authorization: DPoP <token>` con una prueba DPoP; consulte [Token de acceso de la API frontal](/docs/api/fapi/front-api-token)).

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

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |
| `Origin` | sí | Debe ser exactamente `https://<host de inicio de sesión>`. |

`domain_id`: el `id` de la sugerencia (`odm_…`).

Sin cuerpo (se acepta un objeto JSON vacío).

## Respuesta

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

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 401 | `unauthenticated` | No hay una cookie de sesión válida ni un token de acceso de la API frontal. |
| 403 | `origin_not_allowed` | `Origin` falta o es incorrecto. |
| 403 | `role_not_assignable` | La captura por dominio no puede conceder el rol de miembro predeterminado. |
| 403 | `user_not_active` | El usuario no está activo. |
| 404 | `not_found` | El dominio no es una sugerencia para este usuario (desconocido, mal formado, no está en modo `suggest`, no hay una dirección verificada en él, o se descartó tres veces). |
| 409 | `membership_already_exists` | El usuario ya tiene una membresía en la organización. |
| 409 | `organization_disabled` | La organización está deshabilitada o en proceso de eliminación. |
| 409 | `membership_limit_reached` | El usuario ha alcanzado su límite de membresías. |
| 409 | `organization_membership_limit_reached` | La organización ha alcanzado su límite de membresías. |
| 503 | `temporarily_unavailable` | El directorio de membresías no respondió; reintente más tarde. |

## Ejemplo

```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"
}
```

## Datos personales

Este endpoint contiene datos personales: membresías e invitaciones de organizaciones. [Datos personales en las APIs de KeenAuth](/docs/policies/personal-data) describe qué se almacena, durante cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.
