Owner e admin da comunidade do `X-CommunityId` (obrigatório; o `communityId` no corpo deixou de ser lido e, se vier diferente do header, a resposta é 403). Owner e admin podem dar qualquer papel atribuível, admin inclusive (a mesma regra da promoção). Owner nunca é dado na entrada.
Cada e-mail tem o seu resultado em `data.results` (`status`: `invited`, `updated` ou `skipped`, com `reason` e `message` traduzida): um e-mail inválido ou repetido na lista não derruba os outros. `groupIds` e `tags` valem para todos: quem entra fica nos grupos (além dos grupos padrão) e com as tags; quem **já é membro** ganha os grupos e as tags que faltam (nada é tirado; papel e nome não mudam), não recebe e-mail e conta como `updated`. Sem grupos nem tags, quem já é membro volta como `skipped` com `reason: alreadyMember`. E-mail que pediu para não participar da comunidade volta como `skipped` com `reason: optedOut` e nada é enviado.
**Nome (um só por pessoa):** mande `people` (`[{ email, name }]`) em vez de, ou junto com, `emails`. Conta nova nasce com o `name`. Conta que já existe só adota o `name` se o nome dela ainda é provisório (vazio ou a parte do e-mail antes do @) e ela não está em nenhuma outra comunidade; senão o `name` vira o nome dela só nesta comunidade (`displayName`), e um nome de verdade nunca é sobrescrito. O `displayName` do perfil fica igual ao nome que aparece, a não ser que venha `displayName`: um nome diferente só nesta comunidade.
Cada convidado novo recebe e-mail pela fila (a resposta não espera o envio): conta nova recebe o link de uso único `https://<app da comunidade>/_/auth/set-password?id=&token=`, válido por 7 dias (ver `POST /api/auth/set-password`); quem já tem conta recebe "você foi adicionado(a) à comunidade" com o link de entrada. Nenhuma senha é gerada nem devolvida. Até 500 e-mails por chamada.
**Comunidade suspensa pela Memberfy**: 403 com `errors`, `code: COMMUNITY_SUSPENDED` e o motivo (em `message` e em `reason`) para owner, admin, moderador e financeiro; nada é criado nem enviado.