VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Guia rápido/Clientes

Alterar cliente

Corrige dados de um usuário, muda o status e aprova ou recusa cadastros pendentes.

Use estas operações para manter o cadastro em dia: um ERP que corrige o telefone, um atendimento que troca o e-mail, uma rotina que desativa quem saiu da carteira, ou a fila de aprovação de novos clientes B2B. Só os campos enviados mudam; o resto fica como está.

Mudar o status ou o user_type de um usuário derruba as sessões abertas dele: o token em uso deixa de valer e a pessoa precisa entrar de novo. Mudar o e-mail é possível, mas o novo e-mail precisa estar livre.

Para trocar a senha, não use estas rotas: veja Acesso e senha. Para trocar entre PF e PJ com prévia e desfazer, veja PF e PJ.

PUT/api/v1/admin/users/{id}Admin

Atualiza um usuário

Exige manage_users. Devolve o usuário completo, com os campos de Consultar cliente.

Regras que surpreendem:

  • Um administrador não altera o próprio user_type nem o próprio status (400), para não se trancar fora. Os demais campos são livres.
  • is_root (dono da loja) só pode ser alterado por quem já é dono; o último dono não pode ser rebaixado.
  • Texto vazio ("") apaga o campo nos documentos (cpf, cnpj, state_reg) e nos nomes de empresa (legal_name, trade_name); omitir o campo não mexe.
  • Campos desconhecidos são ignorados e a resposta é 200; confira o objeto devolvido para ter certeza do que mudou.
  • password é recusado com 400, em vez de ser ignorado.
  • Se person_type vier no corpo, a troca segue as regras de PF e PJ, incluindo o registro no histórico.

Path parameters

iduuidobrigatório
Id do usuário.

Corpo da requisição

first_namestring
Nome. Numa PJ, o valor é substituído pela razão social.
last_namestring
Sobrenome. Numa PJ, fica vazio.
emailstring
Novo e-mail (vira minúsculo). Se já existe em outro usuário: 400 email already in use.
phonestring
Telefone, gravado em formato internacional.
user_typestring
customervendoradminroot_admin
Papel. Fora da lista: 400 invalid user_type.
statusstring
ADP
Status. Aceita letra ou palavra. Fora da lista: 400 invalid status.
cpfstring
CPF, validado pelos dígitos. "" apaga.
cnpjstring
CNPJ, validado pelos dígitos. "" apaga.
state_regstring
Inscrição estadual (PJ).
person_typestring
FPFJPJ
Declara ou troca o tipo de pessoa.
legal_namestring
Razão social (PJ). Atualiza também first_name.
trade_namestring
Nome fantasia (PJ).
responsible_namestring
Responsável da conta PJ (campo de perfil).
responsible_cpfstring
CPF do responsável da PJ.
languagestring
pt-BRenes
Idioma da conta. Outro valor: 400 invalid language.
currencystring
Moeda preferida (BRL).
timezonestring
Fuso (America/Sao_Paulo).
whatsapp_phonestring
Número do consentimento de WhatsApp.
whatsapp_opt_inboolean
Aceite de WhatsApp.
marketing_opt_inboolean
Aceite de marketing: true grava a data de agora, false apaga.
notify_on_ordersboolean
Recebe aviso de pedido novo.
is_rootboolean
Marca o usuário como dono. Só um dono pode enviar este campo (senão 403).

Exemplo de requisição

bash
curl -X PUT "$BASE_URL/api/v1/admin/users/3dc023ca-3746-4b6e-8afd-686a4a9af99f" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"trade_name": "Pão Doce Centro", "phone": "11 97777-6666"}'

Resposta

200Usuário alterado (trecho)
json
{
  "id": "3dc023ca-3746-4b6e-8afd-686a4a9af99f",
  "email": "contato@paodoce.example.com",
  "user_type": "customer",
  "status": "A",
  "first_name": "Padaria Pão Doce Ltda",
  "phone": "+5511977776666",
  "legal_name": "Padaria Pão Doce Ltda",
  "trade_name": "Pão Doce Centro",
  "person_type": "J",
  "display_name": "Pão Doce Centro",
  "updated_at": "2026-10-11T20:56:18.510829Z"
}
PATCH/api/v1/admin/users/{id}/statusAdmin

Altera o status de um usuário

Muda só o status, com um corpo mínimo. Exige manage_users. Quando o status realmente muda, as sessões do usuário são encerradas. Ao desativar (D), os números de WhatsApp ligados à conta também são soltos (WhatsApp).

Path parameters

iduuidobrigatório
Id do usuário.

Corpo da requisição

statusstringobrigatório
ADPactivedisabledpending
Novo status.
200Status alterado
json
{ "message": "user status updated", "status": "disabled" }

O campo status da resposta repete o que você enviou (letra ou palavra), não a letra gravada.

PUT/api/v1/admin/users/{id}/approveAdmin

Aprova um usuário pendente

Aprova um cadastro pendente: o status vira A. Serve à fila de lojas que revisam novos clientes (por exemplo, B2B por CNPJ) antes de liberar o acesso. Se a loja configurou um grupo para clientes aprovados, o usuário entra nele. É idempotente: aprovar quem já é ativo devolve o usuário, sem novo evento. Exige manage_users. Não há corpo.

A rota não confere se o usuário estava pendente: aprovar uma conta desativada a reativa.

Path parameters

iduuidobrigatório
Id do usuário.
200Usuário aprovado
json
{
  "id": "ed7a3fbc-86f7-4b56-84de-67c583efbc3f",
  "email": "carlos.lima@example.com",
  "user_type": "customer",
  "status": "A",
  "first_name": "Carlos",
  "last_name": "Lima",
  "person_type": "F"
}
PUT/api/v1/admin/users/{id}/rejectAdmin

Rejeita um usuário pendente

Recusa um cadastro pendente: o status vira D. O motivo é opcional e é enviado no evento de recusa, que a loja pode usar para avisar o cliente. Exige manage_users.

Path parameters

iduuidobrigatório
Id do usuário.

Corpo da requisição

reasonstring
Motivo da recusa. O corpo inteiro é opcional.
200Usuário recusado
json
{
  "id": "ed7a3fbc-86f7-4b56-84de-67c583efbc3f",
  "email": "carlos.lima@example.com",
  "user_type": "customer",
  "status": "D",
  "first_name": "Carlos",
  "last_name": "Lima"
}

Erros

StatusQuandoCorpo
400Corpo que não é JSON{"error":"invalid request body","detail":"..."}
400status inválido{"error":"invalid status: zzz (must be active, disabled, or pending)"}
400user_type inválido{"error":"invalid user_type: god"}
400person_type inválido{"error":"invalid person_type: X (want F/PF or J/PJ)"}
400CPF ou CNPJ com dígito verificador errado{"error":"invalid CPF"} ou {"error":"invalid CNPJ"}
400E-mail já usado por outro usuário{"error":"email already in use"}
400Administrador mexendo no próprio papel ou status{"error":"cannot change your own user type"} ou {"error":"cannot change your own status"}
400Rebaixar o último dono{"error":"cannot demote the last ..."}
400password no corpo{"error":"password_not_updatable","detail":"este endpoint não troca senha: ... Use POST /api/v1/admin/users/{id}/set-password."}
400Usuário inexistente em PATCH .../status, approve e reject{"error":"user ... not found"}
401Sem credenciais ou token expirado{"error":"invalid or expired token"}
403Falta manage_users, ou is_root enviado por quem não é dono{"error":"insufficient privileges","required":"manage_users"} ou {"error":"only root admins can modify the root flag"}
404PUT /api/v1/admin/users/{id} com id inexistente{"error":"user not found"}

Mensagens da API em inglês voltam como estão.

Usuário inexistente: 404 só em uma rota

Apenas PUT /api/v1/admin/users/{id} responde 404 para um id que não existe. PATCH .../status, approve e reject respondem 400. Trate os dois códigos.

Para bloquear o acesso, desative; não exclua

Mudar para D encerra as sessões e mantém o histórico e os endereços; dá para reativar depois com A. Para muitos usuários de uma vez, use Ações em lote.

Veja também

  • Consultar cliente
  • PF e PJ
  • Acesso e senha
  • Excluir cliente
Anterior
Criar cliente
Próxima
Excluir cliente
Nesta página
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também