Pular para o conteúdo principal

Criar Nova Loja

Crie uma nova loja (dealer) em uma única requisição transacional: dados cadastrais, endereço, telefones, parâmetros do site (site_config), usuário inicial vinculado à loja, liberação opcional de portais (portal_ids) e logo opcional.

Para criação mínima apenas com dados da loja (sem endereço, telefones e usuário no mesmo payload), use POST /dealer no viewset padrão. Este artigo descreve o fluxo completo via create-full.

Endpoint

POST /dealer/create-full

Método

POST

Autenticação

JWT obrigatório:

Authorization: Bearer {access_token}

Permissões:

  • Administrador: pode criar loja para qualquer white label (deve enviar white_label no JSON).
  • White Label Admin: cria apenas no seu white label; não envie white_label (é aplicado automaticamente).
  • Usuário regular: 403 Forbidden.

Formato da requisição

  • application/json: corpo JSON conforme abaixo; logo pode ser string Base64 (ou data URL data:image/...;base64,...).
  • multipart/form-data: opcional; use o campo de arquivo logo para enviar a imagem. Chaves aninhadas costumam ser serializadas como JSON em um campo ou enviadas conforme o cliente HTTP.
informação

Campos do Google (Analytics, reCAPTCHA etc.) não são aceitos em site_config neste endpoint. Após criar a loja, use a API de configuração do site da loja quando precisar desses parâmetros.

Payload (JSON)

Estrutura principal

CampoTipoObrigatórioDescrição
corporate_namestringSimRazão social.
namestringSimNome fantasia.
cnpjstringSimCNPJ (formato livre; dígitos verificadores validados; apenas números gravados).
emailstringSimE-mail da loja (normalizado para minúsculas).
dealer_websitestring (URL)NãoSite da loja (pode ser vazio "").
white_labelintegerSim para adminID do white label. Obrigatório para administrador; omitir para white label admin.
addressobjectSimEndereço principal (ver tabela abaixo).
phonesarraySimPelo menos um telefone.
site_configobjectSimParâmetros do site (ver tabela abaixo).
initial_userobjectSimPrimeiro usuário da loja (ver tabela abaixo).
portal_idsarray[int]NãoIDs de portais (Integradorsite) ativos a liberar para a loja. IDs inexistentes/inativos são ignorados na associação.
logostringNãoLogo em Base64 ou data URL (JPEG, PNG, WebP).

Objeto address

CampoTipoObrigatórioDescrição
streetstringSimLogradouro.
numberstringSimNúmero.
complementstringNãoComplemento (padrão vazio).
neighborhoodstringSimBairro.
city_idintegerSimID da cidade na base (Domcidade); cidade e UF são preenchidos pelo servidor.
zip_codestringSimCEP (até 8 caracteres, conforme modelo).
orderintegerSimOrdem de exibição.
shopping_idintegerNãoShopping, se houver.
is_auto_shoppingbooleanNãoAuto shopping.
is_activebooleanNãoEndereço ativo (padrão true).
show_in_sitebooleanNãoExibir no site (padrão true).
map_urlstringNãoURL do mapa.
dealer_namestringNãoNome da loja no endereço.
ml_city_id, ml_state_id, ml_neighborhood_idstringNãoIDs Mercado Livre, se usar.
autoline_city_id, autoline_state_idstringNãoIDs AutoLine, se usar.
landmarkstringNãoReferência.

Itens de phones (array)

CampoTipoObrigatórioDescrição
area_codeintegerSimDDD.
phone_numberintegerSimNúmero.
orderintegerSimOrdem.
is_whatsappbooleanNãoPadrão true.
is_whatsapp_webbooleanNãoPadrão false.
show_in_sitebooleanNãoPadrão true.

Objeto site_config

CampoTipoObrigatórioDescrição
proposal_form_emailstring (email)SimE-mail do formulário de proposta.
vehicle_sheet_form_emailstring (email)SimE-mail do formulário de ficha do veículo.
page_titlestringNãoTítulo da página.
meta_descriptionstringNãoMeta descrição.
meta_keywordsstringNãoMeta palavras-chave.
facebook_pagestringNãoPágina Facebook.
twitter_pagestringNãoPágina Twitter.
youtube_channelstring (URL)NãoCanal YouTube.
instagramstringNãoInstagram.
tiktokstring (URL)NãoTikTok.
facebook_pixelstringNãoPixel Facebook.

Chaves não listadas (ex.: campos Google) geram erro de validação neste endpoint.

Objeto initial_user

CampoTipoObrigatórioDescrição
full_namestringSimNome completo (mín. 4 caracteres).
treatment_namestringSimNome de tratamento (mín. 2 caracteres).
emailstring (email)SimE-mail do usuário. Se já existir, o usuário é vinculado à loja (sem novo e-mail de boas-vindas).
phonestringNãoTelefone; normalizado (ex.: remove +55, só dígitos, máx. 12).
access_levelintegerNãonivelacesso do usuário novo (valores permitidos pelo sistema).
access_profileintegerNãoPerfil de acesso na loja (perfil_acessoid); padrão vendedor. Valores aceitos incluem administrador, loja, gerente, vendedor, consultor, white label administrador, suporte agência.

Usuário novo recebe senha inicial e e-mail com credenciais (tarefa disparada após o commit da transação). Usuário existente apenas ganha vínculo UsuarioLoja com o perfil informado.

Exemplo de requisição (administrador)

{
"corporate_name": "LOJA TESTE LTDA",
"name": "LOJA TESTE",
"cnpj": "12.345.678/0001-90",
"email": "contato@lojatest.com.br",
"dealer_website": "https://www.lojatest.com.br",
"white_label": 1,
"address": {
"street": "Rua Exemplo",
"number": "1000",
"complement": "Sala 1",
"neighborhood": "Centro",
"city_id": 1001,
"zip_code": "01310100",
"order": 1
},
"phones": [
{
"area_code": 11,
"phone_number": 987654321,
"order": 1
}
],
"site_config": {
"page_title": "LOJA TESTE",
"proposal_form_email": "propostas@lojatest.com.br",
"vehicle_sheet_form_email": "fichas@lojatest.com.br"
},
"initial_user": {
"full_name": "Maria Silva",
"treatment_name": "Maria",
"email": "maria.silva@lojatest.com.br"
},
"portal_ids": [1, 5]
}

White label admin: omita white_label e autentique com o X-Client-ID do white label, como nas demais rotas v3.

city_id: use o identificador retornado pelo catálogo, por exemplo em GET /catalog/city/{state_id} (campo id de cada cidade).

Exemplo de resposta

201 Created — corpo no formato DealerReadSerializer (mesma forma geral do GET /dealer/{id} / listagem).

{
"id": 10,
"corporate_name": "LOJA TESTE LTDA",
"name": "LOJA TESTE",
"cnpj": "12345678000190",
"email": "contato@lojatest.com.br",
"site": "https://www.lojatest.com.br",
"logo": null,
"xml_folder": "loja-teste",
"replication": false,
"status": {
"id": 1,
"name": "Ativo"
},
"users": [],
"is_site_from_lc": false,
"partner_id": null,
"white_label": {
"id": 1,
"name": "Padrão"
}
}
dica

O status da loja criada por este endpoint é definido como Ativo no servidor. O campo xml_folder (pastaxml) é gerado automaticamente (com sufixo numérico se houver colisão de slug).

Validações principais

  • CNPJ: válido e único por white label (mensagens similares ao fluxo de criação simples).
  • city_id: deve existir em Domcidade.
  • site_config: apenas chaves permitidas; proposal_form_email e vehicle_sheet_form_email obrigatórios.
  • phones: pelo menos um item.
  • white_label: mesmas regras do POST /dealer (admin obriga ID; WL admin não envia).
  • portal_ids: só portais ativos entram em LojaIntegradorsite.

Possíveis erros

400 Bad Request

Validação de campos aninhados (address, phones, site_config, initial_user), CNPJ duplicado, chaves proibidas em site_config, city_id inválido, telefone com mais de 12 dígitos após normalização, access_profile inválido, etc.

401 Unauthorized

Token ausente ou inválido.

403 Forbidden

Usuário sem permissão para criar loja (ex.: usuário regular).