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_labelno 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;logopode ser string Base64 (ou data URLdata:image/...;base64,...).multipart/form-data: opcional; use o campo de arquivologopara enviar a imagem. Chaves aninhadas costumam ser serializadas como JSON em um campo ou enviadas conforme o cliente HTTP.
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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
corporate_name | string | Sim | Razão social. |
name | string | Sim | Nome fantasia. |
cnpj | string | Sim | CNPJ (formato livre; dígitos verificadores validados; apenas números gravados). |
email | string | Sim | E-mail da loja (normalizado para minúsculas). |
dealer_website | string (URL) | Não | Site da loja (pode ser vazio ""). |
white_label | integer | Sim para admin | ID do white label. Obrigatório para administrador; omitir para white label admin. |
address | object | Sim | Endereço principal (ver tabela abaixo). |
phones | array | Sim | Pelo menos um telefone. |
site_config | object | Sim | Parâmetros do site (ver tabela abaixo). |
initial_user | object | Sim | Primeiro usuário da loja (ver tabela abaixo). |
portal_ids | array[int] | Não | IDs de portais (Integradorsite) ativos a liberar para a loja. IDs inexistentes/inativos são ignorados na associação. |
logo | string | Não | Logo em Base64 ou data URL (JPEG, PNG, WebP). |
Objeto address
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
street | string | Sim | Logradouro. |
number | string | Sim | Número. |
complement | string | Não | Complemento (padrão vazio). |
neighborhood | string | Sim | Bairro. |
city_id | integer | Sim | ID da cidade na base (Domcidade); cidade e UF são preenchidos pelo servidor. |
zip_code | string | Sim | CEP (até 8 caracteres, conforme modelo). |
order | integer | Sim | Ordem de exibição. |
shopping_id | integer | Não | Shopping, se houver. |
is_auto_shopping | boolean | Não | Auto shopping. |
is_active | boolean | Não | Endereço ativo (padrão true). |
show_in_site | boolean | Não | Exibir no site (padrão true). |
map_url | string | Não | URL do mapa. |
dealer_name | string | Não | Nome da loja no endereço. |
ml_city_id, ml_state_id, ml_neighborhood_id | string | Não | IDs Mercado Livre, se usar. |
autoline_city_id, autoline_state_id | string | Não | IDs AutoLine, se usar. |
landmark | string | Não | Referência. |
Itens de phones (array)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
area_code | integer | Sim | DDD. |
phone_number | integer | Sim | Número. |
order | integer | Sim | Ordem. |
is_whatsapp | boolean | Não | Padrão true. |
is_whatsapp_web | boolean | Não | Padrão false. |
show_in_site | boolean | Não | Padrão true. |
Objeto site_config
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
proposal_form_email | string (email) | Sim | E-mail do formulário de proposta. |
vehicle_sheet_form_email | string (email) | Sim | E-mail do formulário de ficha do veículo. |
page_title | string | Não | Título da página. |
meta_description | string | Não | Meta descrição. |
meta_keywords | string | Não | Meta palavras-chave. |
facebook_page | string | Não | Página Facebook. |
twitter_page | string | Não | Página Twitter. |
youtube_channel | string (URL) | Não | Canal YouTube. |
instagram | string | Não | Instagram. |
tiktok | string (URL) | Não | TikTok. |
facebook_pixel | string | Não | Pixel Facebook. |
Chaves não listadas (ex.: campos Google) geram erro de validação neste endpoint.
Objeto initial_user
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
full_name | string | Sim | Nome completo (mín. 4 caracteres). |
treatment_name | string | Sim | Nome de tratamento (mín. 2 caracteres). |
email | string (email) | Sim | E-mail do usuário. Se já existir, o usuário é vinculado à loja (sem novo e-mail de boas-vindas). |
phone | string | Não | Telefone; normalizado (ex.: remove +55, só dígitos, máx. 12). |
access_level | integer | Não | nivelacesso do usuário novo (valores permitidos pelo sistema). |
access_profile | integer | Não | Perfil 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"
}
}
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 emDomcidade.site_config: apenas chaves permitidas;proposal_form_emailevehicle_sheet_form_emailobrigatórios.phones: pelo menos um item.white_label: mesmas regras doPOST /dealer(admin obriga ID; WL admin não envia).portal_ids: só portais ativos entram emLojaIntegradorsite.
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).