Atualiza um usuário
PUT/user/:iduser
Atualiza os dados do usuário na empresa.
A atualização não é totalmente parcial — monte o corpo com o cadastro completo. Os dados profissionais, o bloco de vendedor/comissão/técnico e as etiquetas só são tocados quando vêm no corpo, mas os dados pessoais são sempre reescritos: UserCpfCnpj, UserTelephone, UserExtenalId, MFAEnabled e IDModuleFavorite são gravados vazios quando omitidos, e omitir MFAEnabled ainda apaga o segredo do app autenticador. Envie sempre o cadastro inteiro (é o que a tela faz), não apenas o campo alterado.
Pela mesma razão, todo corpo que não seja um atalho exclusivo precisa trazer Login ou UserCpfCnpj — sem nenhum dos dois a requisição é recusada com Documento e/ou email obrigatório para cadastrar usuário. Sem a chave Login no corpo, o login atual é mantido; Login enviado vazio vira o login interno <documento>@email.com.br, o que conta como troca de e-mail (exige o privilégio de redefinir senha, salvo quando o login atual já é interno).
Quando Password é enviado, a senha é validada contra a política da empresa (comprimento mínimo, complexidade, não repetir as 5 últimas senhas e validade). Alterar a senha de outro usuário exige o privilégio de redefinir senha; alterar a própria, não. Mudanças de campos são registradas em log de auditoria (valores de antes e depois).
Convite pendente. Enquanto o vínculo está pendente (Status 3, ver POST /user), nada do cadastro pode ser alterado por esta rota, nem o Status: só a própria pessoa ativa o vínculo, aceitando o convite. Para desistir do convite, remova o usuário da conta.
Usuário que também tem acesso a outra conta. Editando outra pessoa, a conta não altera a senha, o PIN, o e-mail, o CPF/CNPJ e o telefone dela, nem desliga ou troca o tipo do MFA: esses dados valem em todas as contas, e só ela mesma os altera (a senha, pelo link “Recuperar senha” da tela de entrada; o telefone, em Meu perfil). PIN, e-mail, CPF/CNPJ e MFA não têm tela de autoatendimento: a mensagem de erro orienta falar com o suporte. A conta também não reativa o vínculo (Status 1) dessa pessoa: para trazê-la de volta, cadastre-a de novo e ela recebe um convite.
A atualização também cobre os dados profissionais do colaborador — funções, função atual, cargo, escala de trabalho, supervisor e categorias/grupos de endereço de armazenagem — e as etiquetas: o campo Tags substitui integralmente as etiquetas atuais.
Os campos de vendedor, comissão e técnico — RestrictAccessSalesman, DiscountPercentLimit, IDTypeSalesmanCommission, ExcludeCanceledOrdersCommission, ExcludeReturnedOrdersCommission e Technician — só são gravados quando Salesman vem no mesmo corpo; enviados sozinhos, são ignorados.
Quatro campos funcionam como atalhos exclusivos: só têm efeito quando são o único campo do corpo, e nesse caso apenas eles são salvos e a resposta é uma string curta de confirmação em vez do detalhe do usuário — IDModuleCurrent (Módulo atual atualizado), TourSeen (Tour marcado como visto), HomeConfig (Preferências da home salvas) e DashboardConfig (Dashboard salvo). Enviados junto com outros campos, os quatro são simplesmente ignorados.
Resposta a convite (InviteAnswer). Também é atalho exclusivo: com { "InviteAnswer": { "IDUserCompanyInvite": <id>, "Action": "accept" } } (ou "decline") como único campo do corpo, a pessoa logada responde, de dentro do app, um convite para conta; o IDUserCompanyInvite vem do GET /user/{iduser} com Invite=1. Nada do cadastro é tocado, e o retorno é a resposta gravada (UserInviteAnswerResult). O {iduser} tem de ser o próprio usuário do token, e o convite tem de ser dele: o de outra pessoa responde Convite não encontrado, sem dizer que ele existe. Não exige privilégio.
accept: exige o convite pendente e no prazo de 7 dias, e o usuário e a conta que convidou ativos. Ativa o vínculo (Status3 → 1) e aplica os perfis de acesso escolhidos no cadastro. Depois de aceitar, é preciso entrar de novo para acessar a nova conta: a lista de contas do token JWT só muda no login.decline: recusa, inclusive convite vencido. O vínculo continua emStatus3, e a conta que convidou só pode convidar a pessoa de novo após 30 dias.
Responder um convite cancela os outros links pendentes do mesmo vínculo. Pelo link do e-mail, sem login, a resposta vai no POST /user/password-reset com Invite=1.
Request
Responses
- 200
- 400
- 500
Usuário atualizado. Retorna o detalhe completo (mesmo formato de GET /user/{iduser}).
Exceções — quando o corpo traz apenas um destes campos, a resposta é uma string:
IDModuleCurrent→Módulo atual atualizadoTourSeen→Tour marcado como visto(ouTour ignoradoquando a chave fica vazia após o saneamento)HomeConfig→Preferências da home salvas(ouHome ignoradaquando o corpo não é um objeto, ouHome sem alteraçõesquando nenhuma chave é aproveitável)DashboardConfig→Dashboard salvo
Com InviteAnswer como único campo do corpo, o retorno é o objeto UserInviteAnswerResult (a resposta ao convite).
Erros (prefixo [BadRequest]):
A lista de cargos do usuário deve conter apenas IDs separados por vírgulaCPF / CNPJ inválido, verificar os números digitadosEmail inválido, verificarTipo de MFA inválidoTipo de comissão não existeDocumento obrigatório quando não é informadoDocumento e/ou email obrigatório para cadastrar usuárioA senha deve ter no mínimo N caracteresA senha deve conter letras maiúsculas, minúsculas, números e caracteres especiaisUsuário não tem privilégio para resetar senhaA senha informada deve ser diferente das 5 últimas senhas utilizadasEmail já está vinculado a outro usuárioDocumento já está vinculado a outro usuárioUsuário não existeStatus inválido: use 0 (inativo), 1 (ativo) ou 2 (bloqueado)Convite pendente: o cadastro só pode ser alterado depois que a pessoa aceitar. Para desistir, remova o usuário da contaEste usuário também tem acesso a outra conta: só ele mesmo pode alterar <campos>. <orientação> Nada foi salvo—<campos>lista o que o corpo mudaria: senha, PIN, e-mail, CPF/CNPJ, telefone, MFA;<orientação>diz, conforme os campos, onde a pessoa troca a senha (“Esqueci minha senha”, na tela de entrada) e o telefone (Meu perfil) e, para PIN, e-mail, CPF/CNPJ e MFA, manda falar com o suporteEste usuário também tem acesso a outra conta: para reativá-lo aqui, cadastre-o de novo e ele recebe um convite para aceitar. Nada foi salvoNão foi possível conferir as outras contas do usuário; nada foi salvo (<código>)Função não existente, preencha corretamenteFunção atual não atribuída ao colaboradorCategoria armazém não existe (<id>)Grupo endereços não existeEscala não existe, preencha corretamenteColaborador não pode ser seu próprio supervisorColaborador superior não existe, preencha corretamenteColaborador é supervisor de outros colaboradores e não pode ter o vínculo profissional removidoCargo não existe, preencha corretamenteFunção não permitida para o cargo selecionado
Com InviteAnswer:
O convite só pode ser respondido pelo próprio usuário— o{iduser}do caminho não é o usuário do token.Convite não encontrado(convite inexistente ou de outra pessoa)Não foi possível consultar o convite (<código>)Ação inválida: use accept ou declineEste convite já foi aceitoEste convite já foi recusadoEste convite foi cancelado ou substituído por um mais novo. Peça um novo convite à conta <empresa>Este convite expirou. Peça um novo convite à conta <empresa>(só noaccept: a recusa de convite vencido é aceita)Seu usuário ou a conta que convidou está desativado. Fale com o suporte(só noaccept)Este convite não está mais pendente. Atualize a página(outra resposta, um cancelamento ou o fim do prazo chegou antes)Não foi possível registrar a resposta (<código>)Não foi possível registrar a resposta
Erro interno (prefixo Error:).