# Equipo casino

Convray separa dos autoridades dentro de cada casino:

- `owner`, presentado como **Casino Admin**, administra programa, ofertas,
  configuración, tracking y equipo.
- `member`, presentado como **Account Manager**, consulta la operación, los
  partners y el tracking sin mutaciones de configuración o RBAC.

## Invitación

`POST /casino/team/invitations` recibe correo y vencimiento. El servidor fija
el rol `member`, deriva el casino desde la sesión y devuelve un token opaco una
sola vez. La interfaz oficial lo entrega como
`/casino-invitation#token=<secreto>`: el fragmento no viaja en la solicitud HTTP
y la página lo elimina del navegador antes de enviar el token en el body de la
aceptación. El enlace debe compartirse únicamente con la persona invitada.

```http
POST /api/v1/casino/team/invitations
Authorization: Bearer <casino-admin-access-token>
Content-Type: application/json

{
  "email": "account.manager@casino.example",
  "expires_at": "2026-08-21T15:00:00Z"
}
```

La respuesta `201` incluye `role: "member"` y `token` únicamente en esa
entrega. `GET /casino/team` lista miembros e invitaciones sin token.

La persona invitada define su propia contraseña durante la aceptación. Convray
no genera ni comparte contraseñas temporales. Si el correo ya pertenece a una
identidad existente, debe confirmar su contraseña actual.

## Revocación

Casino Admin puede suspender, reactivar o revocar una membresía `member`. Cada
cambio incrementa `authorization_epoch`; las sesiones con la autoridad anterior
dejan de ser válidas. Owners no son objetivos válidos para estas operaciones.

```http
PATCH /api/v1/casino/team/members/5d5906fc-6305-4aec-90ab-40877963d221
Authorization: Bearer <casino-admin-access-token>
Content-Type: application/json

{
  "status": "suspended",
  "expected_version": 1,
  "reason": "Ausencia temporal"
}
```

## Datos y aislamiento

El listado de equipo contiene correos privados del tenant y nunca devuelve el
token persistido. PostgreSQL aplica RLS sobre invitaciones, usuarios y
membresías; ningún endpoint acepta un `tenant_id` suministrado por el cliente.
