Configuração de Opções de MFA de Customer
Visão Geral Este módulo reúne os endpoints administrativos para criar, listar, detalhar, atualizar e remover opções MFA usadas no login de clientes.
Entidades Envolvidas
Opção MFA de customer
Canal de venda
Layout de notificação
Regras Importantes
Tipos aceitos: email, sms, whatsapp, app, external.
name representa o nome interno da opção no painel administrativo.
label representa o nome de exibição utilizado no fluxo de autenticação do cliente.
notificationLayoutId é obrigatório para email, sms e whatsapp.
externalUrl é obrigatória para external.
A opção padrão de app não pode ser removida.
Endpoints Relacionados
GET /api/v3/customers/mfa/options
GET /api/v3/customers/mfa/options/{optionId}
POST /api/v3/customers/mfa/options
PUT /api/v3/customers/mfa/options/{optionId}
DELETE /api/v3/customers/mfa/options/{optionId}
Listagem de Opções de MFA
GET
/customers/mfa/options
Lista opções administrativas de MFA de customer
Descrição Retorna a lista paginada de opções MFA cadastradas para o contexto administrativo.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada
Exemplo de Requisição
1 curl --request GET \
2 --url '{{MAIN_URL}}/customers/mfa/options' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI'
curl --request GET \
--url '{{MAIN_URL}}/customers/mfa/options' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI'
✅ Resposta de Sucesso
1 {
2 "status": true,
3 "data": {
4 "registers": [
5 {
6 "id": 1,
7 "salesChannelId": null,
8 "notificationLayoutId": null,
9 "type": "app",
10 "externalUrl": null,
11 "name": "app-autenticador",
12 "label": "Aplicativo autenticador",
13 "active": true
14 }
15 ] ,
16 "pagination": {
17 "limit": 10,
18 "offset": 0,
19 "pages": 1,
20 "registers": 1
21 }
22 }
23 }
{
"status": true,
"data": {
"registers": [
{
"id": 1,
"salesChannelId": null,
"notificationLayoutId": null,
"type": "app",
"externalUrl": null,
"name": "app-autenticador",
"label": "Aplicativo autenticador",
"active": true
}
],
"pagination": {
"limit": 10,
"offset": 0,
"pages": 1,
"registers": 1
}
}
}
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_READ.
Detalhe de Opção de MFA
GET
/customers/mfa/options/{optionId}
Retorna detalhe de uma opção administrativa de MFA de customer
Descrição Retorna os dados de uma opção MFA específica a partir do optionId.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada
Parâmetros da URL
Parâmetro Tipo Obrigatório Descrição optionIdinteger Sim ID da opção MFA
Exemplo de Requisição
1 curl --request GET \
2 --url '{{MAIN_URL}}/customers/mfa/options/2' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI'
curl --request GET \
--url '{{MAIN_URL}}/customers/mfa/options/2' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI'
✅ Resposta de Sucesso
1 {
2 "status": true,
3 "data": {
4 "id": 2,
5 "salesChannelId": 1,
6 "notificationLayoutId": 45,
7 "type": "email",
8 "externalUrl": null,
9 "name": "email-principal",
10 "label": "Código por e-mail",
11 "active": true
12 }
13 }
{
"status": true,
"data": {
"id": 2,
"salesChannelId": 1,
"notificationLayoutId": 45,
"type": "email",
"externalUrl": null,
"name": "email-principal",
"label": "Código por e-mail",
"active": true
}
}
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_READ. UAPPI_STORE_CUSTOMER_MFA_OPTION_NOT_FOUND404 Opção MFA não encontrada.
Criação de Opção de MFA
POST
/customers/mfa/options
Cria opção administrativa de MFA de customer
Descrição Cria uma nova opção MFA para o catálogo administrativo de customer.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada Content-Typeapplication/jsonTipo de conteúdo
Parâmetros do Corpo
Campo Tipo Obrigatório Descrição salesChannelIdinteger Sim ID do canal usado para validação de contexto da operação typestring Sim Tipo de MFA: email, sms, whatsapp, app, external namestring Sim Nome interno da opção no painel (até 100 caracteres) labelstring Sim Nome de exibição da opção (até 100 caracteres) activeboolean Sim Status da opção notificationLayoutIdinteger Condicional Obrigatório para email, sms e whatsapp externalUrlstring Condicional Obrigatório para external
Exemplo de Requisição
1 curl --request POST \
2 --url '{{MAIN_URL}}/customers/mfa/options' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --header 'Content-Type: application/json' \
5 --data '{
6 "salesChannelId": 1,
7 "type": "sms",
8 "name": "sms-principal",
9 "label": "Código por SMS",
10 "notificationLayoutId": 32,
11 "active": true
12 }'
curl --request POST \
--url '{{MAIN_URL}}/customers/mfa/options' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI' \
--header 'Content-Type: application/json' \
--data '{
"salesChannelId": 1,
"type": "sms",
"name": "sms-principal",
"label": "Código por SMS",
"notificationLayoutId": 32,
"active": true
}'
✅ Resposta de Sucesso HTTP Status: 201 Created
1 {
2 "status": true,
3 "data": {
4 "id": 5,
5 "salesChannelId": 1,
6 "notificationLayoutId": 32,
7 "type": "sms",
8 "externalUrl": null,
9 "name": "sms-principal",
10 "label": "Código por SMS",
11 "active": true
12 }
13 }
{
"status": true,
"data": {
"id": 5,
"salesChannelId": 1,
"notificationLayoutId": 32,
"type": "sms",
"externalUrl": null,
"name": "sms-principal",
"label": "Código por SMS",
"active": true
}
}
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição INVALID_REQUEST_PAYLOAD400 Dados da requisição inválidos. UAPPI_STORE_CUSTOMER_MFA_OPTION_INVALID_NOTIFICATION_LAYOUT_TYPE400 Layout de notificação incompatível com o tipo da opção. UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_WRITE.
Atualização de Opção de MFA
PUT
/customers/mfa/options/{optionId}
Atualiza opção administrativa de MFA de customer
Descrição Atualiza os dados de uma opção MFA existente.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada Content-Typeapplication/jsonTipo de conteúdo
Parâmetros da URL
Parâmetro Tipo Obrigatório Descrição optionIdinteger Sim ID da opção MFA
Parâmetros do Corpo
Campo Tipo Obrigatório Descrição salesChannelIdinteger Sim ID do canal usado para validação de contexto da operação typestring Sim Tipo de MFA: email, sms, whatsapp, app, external namestring Sim Nome interno da opção no painel (até 100 caracteres) labelstring Sim Nome de exibição da opção (até 100 caracteres) activeboolean Sim Status da opção notificationLayoutIdinteger Condicional Obrigatório para email, sms e whatsapp externalUrlstring Condicional Obrigatório para external
Exemplo de Requisição
1 curl --request PUT \
2 --url '{{MAIN_URL}}/customers/mfa/options/5' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --header 'Content-Type: application/json' \
5 --data '{
6 "salesChannelId": 1,
7 "type": "sms",
8 "name": "sms-principal",
9 "label": "Código por SMS (Atualizado)",
10 "notificationLayoutId": 32,
11 "active": true
12 }'
curl --request PUT \
--url '{{MAIN_URL}}/customers/mfa/options/5' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI' \
--header 'Content-Type: application/json' \
--data '{
"salesChannelId": 1,
"type": "sms",
"name": "sms-principal",
"label": "Código por SMS (Atualizado)",
"notificationLayoutId": 32,
"active": true
}'
✅ Resposta de Sucesso
1 {
2 "status": true,
3 "data": {
4 "id": 5,
5 "salesChannelId": 1,
6 "notificationLayoutId": 32,
7 "type": "sms",
8 "externalUrl": null,
9 "name": "sms-principal",
10 "label": "Código por SMS (Atualizado)",
11 "active": true
12 }
13 }
{
"status": true,
"data": {
"id": 5,
"salesChannelId": 1,
"notificationLayoutId": 32,
"type": "sms",
"externalUrl": null,
"name": "sms-principal",
"label": "Código por SMS (Atualizado)",
"active": true
}
}
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição INVALID_REQUEST_PAYLOAD400 Dados da requisição inválidos. UAPPI_STORE_CUSTOMER_MFA_OPTION_INVALID_NOTIFICATION_LAYOUT_TYPE400 Layout de notificação incompatível com o tipo da opção. UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_WRITE. UAPPI_STORE_CUSTOMER_MFA_OPTION_NOT_FOUND404 Opção MFA não encontrada.
Remoção de Opção de MFA
DELETE
/customers/mfa/options/{optionId}
Remove opção administrativa de MFA de customer
Descrição Remove uma opção MFA do catálogo administrativo.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada
Parâmetros da URL
Parâmetro Tipo Obrigatório Descrição optionIdinteger Sim ID da opção MFA
Exemplo de Requisição
1 curl --request DELETE \
2 --url '{{MAIN_URL}}/customers/mfa/options/5' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI'
curl --request DELETE \
--url '{{MAIN_URL}}/customers/mfa/options/5' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI'
✅ Resposta de Sucesso
1 {
2 "status": true,
3 "data": true
4 }
{
"status": true,
"data": true
}
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_WRITE. UAPPI_STORE_CUSTOMER_MFA_DEFAULT_OPTION_DELETE400 A opção padrão de MFA não pode ser removida. UAPPI_STORE_CUSTOMER_MFA_OPTION_NOT_FOUND404 Opção MFA não encontrada.
Validação do Código MFA do Cliente
POST
/customers/{customerId}/mfa/validate
Valida o código MFA app (TOTP) configurado pelo customer
Descrição Valida o código TOTP informado contra o MFA app já configurado pelo customer, retornando um booleano simples.
Esse endpoint permite que sistemas externos integrados utilizem o MFA app já configurado pelo customer na plataforma como fator adicional de autenticação em seus próprios fluxos, sem precisar implementar um setup de MFA próprio.
O código não é consumido nem invalidado após a verificação, e não há bloqueio por tentativas para essa rota.
Parâmetros
Header Valor Descrição AuthorizationBearer {token}Token de autenticação de usuário da API privada Content-Typeapplication/jsonTipo de conteúdo
Parâmetros da URL
Parâmetro Tipo Obrigatório Descrição customerIdinteger Sim ID do customer
Parâmetros do Corpo
Parâmetro Tipo Obrigatório Descrição codestring Sim Código TOTP de 6 dígitos gerado pelo app autenticador do customer
Exemplo de Requisição
1 curl --request POST \
2 --url '{{MAIN_URL}}/customers/10/mfa/validate' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --header 'Content-Type: application/json' \
5 --data '{
6 "code": "123456"
7 }'
curl --request POST \
--url '{{MAIN_URL}}/customers/10/mfa/validate' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI' \
--header 'Content-Type: application/json' \
--data '{
"code": "123456"
}'
✅ Resposta de Sucesso
1 {
2 "status": true,
3 "data": true
4 }
{
"status": true,
"data": true
}
O valor de data é true quando o código informado é válido para o MFA app configurado, e false quando o código é inválido.
⚠️ Possíveis erros:
Código Interno Código HTTP Descrição UAPPI_AUTH_INVALID401 Token de autenticação inválido ou ausente. UAPPI_AUTH_FORBIDDEN_SCOPE403 Usuário sem escopo CUSTOMER_MFA_READ. UAPPI_STORE_CUSTOMER_NOT_FOUND404 Customer não encontrado. UAPPI_STORE_CUSTOMER_MFA_NOT_CONFIGURED400 O customer não possui MFA app configurado.