Register New Company
POST/company/auth/register
Endpoint para registrar novas empresas e seu usuário administrador inicial.
Realiza as seguintes operações:
- Valida dados obrigatórios (razão social, senhas coincidentes)
- Verifica unicidade do email
- Cria endereço fiscal
- Cria empresa no banco de dados
- Cria usuário administrador
- Configura conta Stripe (customer + connected account)
- Envia email de boas-vindas
- Cria tarifa inicial gratuita por 1 mês
- Vincula com fornecedor existente se o taxid coincidir
Fluxo detalhado:
- Cliente envia dados da empresa e do usuário em formato JSON
- Servidor valida campos obrigatórios (406 se faltarem)
- Verifica taxid conforme normas fiscais espanholas (406 se inválido)
- Verifica unicidade do email (403 se existir)
- Cria endereço fiscal com os dados fornecidos
- Registra empresa no banco de dados
- Cria usuário administrador com senha criptografada
- Configura conta Stripe (customer + connected account) para pagamentos futuros
- Envia email de ativação com token único
- Cria tarifa inicial gratuita por 30 dias
- Se existir um company_provider com o mesmo taxid, vincula-o
Requisitos de dados:
- Taxid/NIF/CIF válido conforme normativa espanhola (opcional, mas recomendado)
- Razão social completa
- Email corporativo não registrado
- Senha segura (mínimo 8 caracteres, maiúsculas, números e caracteres especiais)
- Endereço fiscal completo
Estrutura da requisição:
\{
user: \{
email: admin@empresa.com,
password: SenhaSegura123!,
password_confirm: SenhaSegura123!
\},
invoice_data: \{
taxid: B12345678,
email: admin@empresa.com,
<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>
<ParamsDetails
parameters={[]}
>
</ParamsDetails>
<RequestSchema
title={"Body"}
body={{"content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","description":"Dados do usuário administrador","properties":{"email":{"type":"string","format":"email","description":"E-mail do usuário"},"password":{"type":"string","format":"password","description":"Senha do usuário"},"password_confirm":{"type":"string","description":"Confirmação de senha"}}},"invoice_data":{"type":"object","description":"Dados fiscais de faturação","properties":{"taxid":{"type":"string","description":"NIF/CIF da empresa"},"email":{"type":"string","format":"email","description":"E-mail de faturamento"},"socialName":{"type":"string","description":"Razão social"},"phone":{"type":"string","description":"Telefone de contato"}}},"socialName":{"type":"string","description":"Razão social da empresa"},"address":{"type":"object","description":"Endereço fiscal da empresa","properties":{"place_id":{"type":"string","description":"ID do local do Google Places"},"formatted_address":{"type":"string","description":"Endereço formatado"},"geometry":{"type":"object","description":"Coordenadas GPS","properties":{"location":{"type":"object","properties":{"lat":{"type":"number","format":"float"},"lng":{"type":"number","format":"float"}}}}},"address_components":{"type":"array","description":"Componentes da direção","items":{"type":"object"}},"phone":{"type":"string","description":"Telefone do endereço"}}}},"required":["user","invoice_data","socialName","address"],"title":"RegisterRequest"},"example":{"user":{"email":"admin@transportesejemplo.com","password":"Transportes2024!","password_confirm":"Transportes2024!"},"invoice_data":{"taxid":"B12345678","email":"admin@transportesejemplo.com","socialName":"Transportes Ejemplo S.L.","phone":"+34123456789"},"socialName":"Transportes Ejemplo S.L.","address":{"place_id":"ChIJgTwKgJcpQg0RaSKMYcHeNs","address_components":[{"long_name":"123","types":["street_number"]},{"long_name":"Calle Mayor","types":["route"]},{"long_name":"Madrid","types":["locality","administrative_area_level_2"]},{"long_name":"Madrid","types":["administrative_area_level_1"]},{"long_name":"28013","types":["postal_code"]},{"long_name":"Spain","types":["country"]}],"formatted_address":"Calle Mayor 123, Madrid, 28013, Spain","geometry":{"location":{"lat":40.4168,"lng":-3.7038}},"phone":"+34123456789"}}}},"required":true}}
>
</RequestSchema>
<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Registro bem-sucedido (retorna objeto vazio)","content":{"application/json":{"schema":{"type":"object","example":{}}}},"headers":{}},"400":{"description":"Erro ao criar endereço ou UTC inválido","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":400},"message":{"type":"string","example":"Error creating address"}}}}},"headers":{}},"403":{"description":"E-mail já registrado","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":403},"message":{"type":"string","example":"COMPANY_EXISTS"},"existingCompany":{"type":"object"}}}}},"headers":{}},"406":{"description":"Erro de validação","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":406},"message":{"type":"string","enum":["NAME_REQUIRED","PASSWORD_NOT_MATCH","USER_ALREADY_EXISTS","USER_DISABLED_RECOVERABLE","CIA_ASIGN_FAILED","TRUCKER_DATA_INCOMPLETE"],"example":"PASSWORD_NOT_MATCH"}}}}},"headers":{}}}}
>
</StatusCodes>