Conclui o login com o código da verificação em duas etapas
POST/api/auth/login/two-factor
- Auth
- Public
- API key:
- No API key accepted
- X-CommunityId
X-CommunityIdSend the X-CommunityId of the community the operation happens in.
Segundo passo do login quando `POST /api/auth/login` respondeu `twoFactorRequired: true`. Mande o `challengeId` com o `code` (6 dígitos, WhatsApp ou SMS) **ou** um `recoveryCode` (um dos 10 códigos de recuperação, que deixa de valer e dispara o e-mail de alerta). A resposta é a mesma do login (`member`, `token`, `mustChangePassword`), mais `deviceToken` quando `rememberDevice: true` (guarde no navegador e mande no próximo `POST /api/auth/login`: por 90 dias o código não é pedido) e, depois de um código de recuperação, `recoveryCodeUsed` e `recoveryCodesRemaining`.
Código errado: **400** `param = code` com as tentativas restantes (`data.attemptsLeft`, 5 por código); sem tentativas, peça outro (`/resend`). O desafio vale 15 minutos e aceita 10 erros no total; depois, **400** `param = challengeId` (`TWO_FACTOR_CHALLENGE_INVALID`): faça o login de novo. Público; 60 chamadas por IP em 15 minutos (429).
Headers
| Name | Type | Description |
|---|---|---|
X-CommunityIdoptional | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Request body application/json
| Name | Type | Description |
|---|---|---|
challengeIdrequired | string | |
codeoptional | string | |
recoveryCodeoptional | string | |
rememberDeviceoptional | boolean |
Responses
| Status | Description |
|---|---|
200 | Login concluído (mesma forma do `POST /api/auth/login`). |
400 | Requisição inválida — falha de validação. |
429 | Tentativas demais. O header `Retry-After` diz em quantos segundos tentar de novo. |
curl example
curl -X POST "https://api.memberfy.net/api/auth/login/two-factor" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{"challengeId":"q3V0bWJmZXhhbXBsZS1jaGFsbGVuZ2UtaWQtZm9yLWRvY3M"}'