Endereços
Lista, cria, altera e exclui os endereços de entrega e cobrança de um cliente.
Um cliente pode ter vários endereços. Eles são usados no checkout (entrega e cobrança), na emissão da nota fiscal e no cálculo de frete. Um deles é o padrão: o que a vitrine sugere primeiro e o que os filtros por cidade e UF da lista de clientes consultam.
Use estas rotas quando o endereço nasce fora da vitrine: o ERP cadastra a filial do cliente, o atendimento corrige um CEP, uma migração traz o histórico.
Cada endereço traz, além dos campos próprios, os campos de apelido b_* (cobrança) e s_* (entrega), que repetem os campos principais para quem já lê esses nomes.
/api/v1/admin/users/{id}/addressesAdminLista os endereços de um usuário
Exige view_users ou manage_users. Usuário sem endereços devolve lista vazia ([]).
Path parameters
iduuidobrigatório{
"addresses": [
{
"id": "d9e1749d-ae6a-4f9a-8943-22d93d90cde0",
"user_id": "3dc023ca-3746-4b6e-8afd-686a4a9af99f",
"label": "Matriz",
"is_default": true,
"first_name": "Padaria Pão Doce Ltda",
"last_name": "",
"address_line1": "Avenida Paulista, 1000",
"complement": "Sala 14",
"district": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310-100",
"country": "BR",
"phone": "1133334444",
"created_at": "2026-10-11T20:56:23.338259Z",
"updated_at": "2026-10-11T20:57:46.981711Z"
}
],
"total": 1
}Campos do endereço
iduuidaddress_id repete o valor.user_iduuidlabelstringis_defaultbooleanfirst_namestringlast_namestringaddress_line1stringAvenida Paulista, 1000).address_line2stringcomplementstringSala 14, Bloco B). Campo próprio, não se mistura com address_line2.districtstringdistrict_id é o id no catálogo de bairros, quando o bairro existe lá.citystringcity_id é o id no catálogo de cidades, quando a cidade existe lá (usado para casar áreas de entrega).statestringSP).postal_codestring01310-100 ou 01310100).countrystringpadrão: BRphonestringtypestringD).s_*, b_*strings_firstname, s_lastname, s_address, s_city, s_state, s_zipcode, s_country, s_phone) e cobrança (b_*, os mesmos nomes). Sempre iguais aos campos acima.created_atstringupdated_at é a última alteração./api/v1/admin/users/{id}/addressesAdminCria um endereço para um usuário
Cadastra um endereço em nome do cliente. Exige manage_users. O corpo aceita os nomes dos campos e também apelidos de entrada (address, zipcode, address2, firstname...).
Esta rota não aplica as regras de endereço da vitrine (número obrigatório, conferência do CEP). Valide antes de enviar.
Path parameters
iduuidobrigatórioCorpo da requisição
first_namestringobrigatóriofirstname.last_namestringlastname. Opcional: para PJ, use a razão social em first_name.address_line1stringobrigatórioaddress. Se você também enviar number, ele é anexado (Rua das Flores, 123) quando ainda não aparece no texto.address_line2stringaddress2.complementstringdistrictstringneighborhood.citystringobrigatóriostatestringobrigatóriopostal_codestringobrigatóriozipcode, zip_code, post_code.countrystringpadrão: BRphonestringlabelstringis_defaultbooleanpadrão: falsecity_iduuiddistrict_iduuidExemplo de requisição (criar)
curl -X POST "$BASE_URL/api/v1/admin/users/3dc023ca-3746-4b6e-8afd-686a4a9af99f/addresses" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Padaria Pão Doce Ltda",
"address_line1": "Avenida Paulista, 1000",
"complement": "Sala 12",
"district": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310-100",
"phone": "1133334444",
"label": "Loja",
"is_default": true
}'Resposta (criar)
{
"id": "d9e1749d-ae6a-4f9a-8943-22d93d90cde0",
"user_id": "3dc023ca-3746-4b6e-8afd-686a4a9af99f",
"label": "Loja",
"is_default": true,
"first_name": "Padaria Pão Doce Ltda",
"last_name": "",
"address_line1": "Avenida Paulista, 1000",
"complement": "Sala 12",
"district": "Bela Vista",
"district_id": "e471b959-3334-4bcb-93e4-45609cc40fc0",
"city": "São Paulo",
"city_id": "3d899205-1b71-4f09-8bbf-2c62bcefc2e5",
"state": "SP",
"postal_code": "01310-100",
"country": "BR",
"phone": "1133334444",
"created_at": "2026-10-11T20:56:23.338259Z",
"updated_at": "2026-10-11T20:56:23.338259Z"
}A resposta é o endereço completo (com os apelidos s_* e b_*, omitidos aqui). Reaproveite o id para alterar ou excluir.
/api/v1/admin/users/{id}/addresses/{addressId}AdminAtualiza um endereço de um usuário
Altera apenas os campos enviados. Exige manage_users. Aceita os mesmos nomes e apelidos da criação, todos opcionais.
Path parameters
iduuidobrigatórioaddressIduuidobrigatórioaddresses[].id).Corpo da requisição
first_namestringlast_namestringaddress_line1stringaddress_line2stringcomplementstringdistrictstringcitystringstatestringpostal_codestringcountrystringphonestringlabelstringis_defaultbooleantrue torna este o padrão.A resposta é o endereço atualizado, no mesmo formato da criação, com status 200.
/api/v1/admin/users/{id}/addresses/{addressId}AdminExclui um endereço de um usuário
Remove o endereço. Exige manage_users.
Path parameters
iduuidobrigatórioaddressIduuidobrigatório{ "message": "address deleted" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Faltam campos obrigatórios na criação | {"error":"missing required address fields","detail":"first_name, address_line1, city, state, postal_code are required"} |
| 400 | Corpo que não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | addressId que não é UUID | {"error":"invalid addressId","detail":"addressId must be a valid UUID"} |
| 401 | Sem credenciais ou token expirado | {"error":"invalid or expired token"} |
| 403 | Falta o privilégio manage_users | {"error":"insufficient privileges","required":"manage_users"} |
| 404 | Usuário (criação) ou endereço (alterar, excluir) inexistente | {"error":"user not found"} ou {"error":"address not found"} |
| 500 | Id de usuário que não é UUID, ou falha interna | {"error":"failed to create address","detail":"..."} |