Guia de Integração - API de Cotação Automatizada

Bem-vindo ao guia de integração da API de Cotação. Este documento fornece todas as informações necessárias para que sistemas de terceiros possam enviar solicitações de cotação de seguros para processamento automático via Playwright.

🔗 Visão Geral

A API atua como um gatilho para um robô de automação (worker). Ao receber uma requisição válida, o sistema:

  1. Valida a estrutura dos dados.
  2. Armazena as informações para processamento.
  3. Inicia imediatamente o robô que realizará o preenchimento no portal de seguros.

🛠 Especificação Técnica

Endpoint de Cotação

📋 Estrutura do JSON (Payload)

Abaixo estão detalhados os campos obrigatórios para uma requisição bem-sucedida:

👤 Objeto: segurado

Campo Tipo Descrição
cpfString (Numeric)CPF do segurado (Apenas números).
nomeSocialStringNome completo ou social do segurado.
telefoneString (Numeric)Telefone com DDD (Apenas números).
emailStringE-mail válido do segurado.
cepString (Numeric)CEP de residência (Apenas números).
nomeString (Opcional)Nome do segurado. Pode ser autopreenchido pela busca do CPF no portal.
sexoString (Opcional)"Masculino" ou "Feminino". O validator aceita maiúsculas/minúsculas indistintamente.
estadoCivilString (Opcional)Valores aceitos: Solteiro(a), Casado(a), Viúvo(a), Divorciado(a), Separado(a), União estável. O validator é tolerante a maiúsculas/minúsculas e acentos.

🛡 Objeto: seguro

Campo Tipo Descrição
tipoStringValores aceitos: Seguro novo, Renovação com nossa corretora, Renovação de outra corretora. O validator é tolerante a maiúsculas/minúsculas e acentos. Para ambas as opções de Renovação, o conjunto de campos exigidos é o mesmo (ver linhas seguradoraAnterior, apoliceAnterior, etc. abaixo — Regra 8).
nomeHierarquicoString (Opcional)Nome do corretor ou responsável. Se omitido, o padrão aplicado é "Diego Gervasio".
seguradorasDisponiveisArray de String (Opcional)Lista de seguradoras a cotar. Quando informado, a automação mantém selecionadas as seguradoras enviadas e desmarca as demais. Se não informado, mantém o padrão do portal. Valores aceitos (case/acento-insensível) — 12 canônicos e 5 aliases:
Canônicos: aliro, allianz, azul, bradesco, hdi seguros, hdi seguros fit, hdi seguros basico, mapfre, porto, suhai, tokio, yelum.
Aliases: hdihdi seguros; hdi fithdi seguros fit; hdi basico / hdi basicos / hdi seguros basicoshdi seguros basico. Qualquer outro valor é rejeitado com VALIDATION_ERROR (HTTP 422).
seguradoraAnteriorStringObrigatório para Renovação. Nome da seguradora anterior.
sucursalAnteriorStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado, ou quando seguro.seguradorasDisponiveis incluir bradesco, ou quando seguro.seguradoraAnterior contiver porto. Caso contrário, não envie (a API rejeita).
apoliceAnteriorStringObrigatório para Renovação. Número da apólice anterior.
coberturaAnteriorStringObrigatório para Renovação. Cobertura da apólice anterior.
statusApoliceAnteriorStringObrigatório para Renovação. Status da apólice anterior.
inicioVigenciaAnteriorStringObrigatório para Renovação. Data de início de vigência da apólice anterior.
fimVigenciaAnteriorStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional.
renovacaoMesmoVeiculoStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional.
renovacaoInclusaoCascoStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional. Quando enviado, só é aceito quando seguro.seguradorasDisponiveis incluir yelum, mapfre ou aliro, ou quando seguro.seguradorasDisponiveis não for informado.
itemApoliceAnteriorString(Opcional) Item da apólice anterior.
qtdSinistrosParcialAnteriorString(Opcional) Quantidade de sinistros de perda parcial na apólice anterior.
ciApoliceAnteriorString(Opcional) C.I. da apólice anterior.
classeBonusAnteriorString(Opcional) Classe de bônus da apólice anterior.
comissaoApoliceAnteriorString (Opcional)Comissão da apólice anterior (campo Padrao2000_Cobertura7045 do portal). Aparece nas opções de Renovação. O portal o renderiza desabilitado por padrão (habilitado apenas em certas combinações de seguradora) — se estiver indisponível, invisível ou desabilitado, a automação ignora e registra no log, sem falhar.
bonusRenovacaoTodasSeguradorasStringObrigatório para Renovação. "Sim" ou "Não" para bônus aplicado em todas as seguradoras.
bonusAllianzString(Opcional) Classe de bônus Allianz. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir allianz (a API rejeita caso contrário).
bonusSuhaiString(Opcional) Classe de bônus Suhai. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir suhai (a API rejeita caso contrário).
bonusPortoAzulItauString(Opcional) Classe de bônus Porto/Azul/Itau. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir porto ou azul (a API rejeita caso contrário).
bonusMapfreString(Opcional) Classe de bônus Mapfre. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir mapfre (a API rejeita caso contrário).
bonusTokioString(Opcional) Classe de bônus Tokio. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir tokio (a API rejeita caso contrário).
bonusHdiString(Opcional) Classe de bônus HDI. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir qualquer HDI (hdi seguros, hdi seguros fit, hdi seguros basico) (a API rejeita caso contrário).
bonusBradescoString(Opcional) Classe de bônus Bradesco. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir bradesco (a API rejeita caso contrário).
bonusYelumAliroIndianaString(Opcional) Classe de bônus Yelum/Aliro/Indiana. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir yelum ou aliro (a API rejeita caso contrário).

🚗 Objeto: veiculo

Campo Tipo Descrição
placaStringPlaca do veículo (ex: ABC1D23).
chassiRemarcadoString"Sim" ou "Não".
financiadoString"Sim" ou "Não".
alienacaoFiduciariaString (Opcional)Texto da alienação fiduciária (ex.: nome da financeira). Usar apenas quando financiado for "Sim" (a API rejeita caso contrário). Se o portal não exibir este campo, a automação ignora e registra no log.
antifurtoStringValores: "Alarme Sonoro", "Bloqueador", "Rastreador", "Dispositivos comuns", "Não".
alarmeSonoroAllianzString (Opcional)Ex: "Corta Combustível - RF-ST2001". Usar apenas quando antifurto for "Alarme Sonoro" (a API rejeita caso contrário).
bloqueadorAllianzString (Opcional)Ex: "CAR SYSTEM - Bloqueador". Texto da opção de bloqueador para Allianz. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorBradescoSegurosString (Opcional)Ex: "Cielocel GSM/GPRS Gs8". Texto da opção de bloqueador para Bradesco Seguros. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorYelumString (Opcional)Texto da opção de bloqueador para Yelum. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorPortoString (Opcional)Texto da opção de Porto Seguro. Usar quando antifurto for "Bloqueador". Também é aceito quando antifurto for "Rastreador" (Porto Seguro) (a API rejeita caso contrário).
gerenciadoraTokioString (Opcional)Texto da gerenciadora para Tokio Marine quando exigido (ex.: quando o valor selecionado for "CONTROLLOC GPS").
alarmeSonoroAntiFurtoBradescoString (Opcional)Ex: "Cielocel GSM/GPRS Gs8". Texto da opção Bradesco. Usar quando antifurto for "Alarme Sonoro" e também quando antifurto for "Dispositivos comuns" (a API rejeita caso contrário).
antifurtoTokioString (Opcional)Ex: "CONTROLLOC GPS". Texto da opção Tokio Marine (serve tanto para antifurto/rastreador quanto para bloqueador). Se o campo não existir/não estiver visível no portal, a automação ignora e registra no log.
antifurtoMapfreString (Opcional)Ex: "CAR SYSTEM - Bloqueador". Texto da opção de antifurto/bloqueador para Mapfre. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
rastreadorAllianzString (Opcional)Texto da opção de rastreador para Allianz. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorBradescoSegurosString (Opcional)Texto da opção de rastreador para Bradesco Seguros. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorYelumString (Opcional)Texto da opção de rastreador para Yelum. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorMapfreString (Opcional)Texto da opção de rastreador para Mapfre. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
dispositivosComunsAllianzString (Opcional)Obrigatório quando antifurto for "Dispositivos comuns". Texto da opção de dispositivos comuns para Allianz. Se o portal não exibir este campo, a automação ignora e registra no log.
acessoriosString (Opcional)"Sim" ou "Não" para expandir a seção "Blindagem, kit Gás, acessórios, equipamentos ou opcionais".
kitacessoriosString (Opcional)"Sim" ou "Não" para marcar Acessórios (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
opcionaisString (Opcional)"Sim" ou "Não" para marcar Opcionais (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
opcionais2String (Opcional)Lista de opcionais (separados por vírgula), ex.: "Air bag motorista, Air bag passageiro". Usar apenas quando acessorios for "Sim" e opcionais for "Sim" (a API rejeita caso contrário).
equipamentosString (Opcional)"Sim" ou "Não" para marcar Equipamentos (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
capotaFibraString (Opcional)Valor do equipamento Capota de Fibra (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaCapotaFibraString (Opcional)"Sim" ou "Não" para marcar franquia da Capota de Fibra. Se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
equipamentoEspecialString (Opcional)Valor do equipamento Equipamento Especial (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaEquipamentoEspecialString (Opcional)"Sim" ou "Não" para marcar franquia do Equipamento Especial. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
telefoneCelularVeicularString (Opcional)Valor do equipamento Telefone Celular Veicular (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaTelefoneCelularVeicularString (Opcional)"Sim" ou "Não" para marcar franquia do Telefone Celular Veicular. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
rebaixadoString (Opcional)"Sim" ou "Não". Informa se o veículo é rebaixado. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
tunadoString (Opcional)"Sim" ou "Não". Informa se o veículo é tunado. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
radioAmFmString (Opcional)Valor do acessório Radio AM/FM (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
cdPlayerString (Opcional)Valor do acessório CD Player (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
franquiaCdPlayerString (Opcional)"Sim" ou "Não" para marcar franquia do CD Player. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
dvdPlayerString (Opcional)Valor do acessório DVD Player (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
rodasLigaLeveString (Opcional)Valor do acessório Rodas de Liga Leve (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
kitMultimidiaString (Opcional)Valor do acessório Kit Multimídia (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
franquiaRadioAmFmString (Opcional)"Sim" ou "Não" para marcar franquia do Radio AM/FM. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
blindagemString (Opcional)"Sim" ou "Não" para marcar Blindagem.
coberturaBlindagemString (Opcional)Obrigatório quando blindagem for "Sim". Texto da cobertura de blindagem.
valorBlindagemString (Opcional)Obrigatório quando coberturaBlindagem estiver preenchido. Valor da blindagem (numérico, ex.: 1000,00).
comFranquiaString (Opcional)"Sim" ou "Não" para marcar "Com franquia". Se blindagem for "Sim" (ou coberturaBlindagem for enviado) e não for passado, o padrão assumido é "Não".
kitGasString (Opcional)"Sim" ou "Não" para marcar Kit Gás.
coberturaKitGasString (Opcional)Obrigatório quando kitGas for "Sim". "Sim" ou "Não" para marcar Cobertura de Kit Gás.
valorKitGasString (Opcional)Obrigatório quando coberturaKitGas for "Sim". Valor do Kit Gás (numérico, ex.: 1000,00).
comFranquiaKitGasString (Opcional)"Sim" ou "Não" para marcar "Com franquia" do Kit Gás. Se coberturaKitGas for "Sim" e não for passado, o padrão assumido é "Não".
possuiAntifurtoPortoString (Opcional)Ex: "Sim". "Sim" ou "Não" para marcar "Possui algum antifurto da Porto Seguro?" (serve tanto no fluxo geral quanto no fluxo de bloqueador).
hdiSegurosBasicoString (Opcional)Ex: "Sim". "Sim" ou "Não" para acionar a seleção básica da HDI após avançar. Se antifurto for "Bloqueador", este campo é opcional (pode ser omitido).
pcdCnhEspecialString (Opcional)"Sim" ou "Não". PcD / CNH Especial. Se o portal não exibir este campo, a automação ignora e registra no log.
valorAdaptacaoPcdString (Opcional)Valor da adaptação PcD (numérico, ex.: 1000,00). Usar apenas quando pcdCnhEspecial for "Sim" (a API rejeita caso contrário). Se o portal não exibir este campo, a automação ignora e registra no log.
cepPernoiteString (Numeric)CEP onde o veículo fica guardado (Apenas números).
cepCirculacaoString (Numeric)CEP de circulação (Apenas números). Se o portal não exibir este campo, a automação ignora e registra no log.
kmMesString (Numeric)Estimativa de KM rodados por mês (Apenas números). Se o portal não exibir este campo, a automação ignora e registra no log.
tipoUsoStringFinalidade de uso do veículo. 27 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura8999 do portal: Particular, Prestar serviços, Representante comercial/vendas, Táxi, Transporte por aplicativos - Veículo próprio, Transporte comercial de carga, Transporte por aplicativos - Veículo alugado, Ambulância, Auto escola, Bombeiro, Chapa de fábrica, Entrega de Mercadorias, Fins publicitários / Expositor, Frete/Carreto/Mudanças, Funerária, Locadora (Balcão), Locadora (Contrato), Lotação com cobrança de passagem, Lotação sem cobrança de passagem, Policiamento / Vigilância / Ronda / Escolta, Test Drive, Transporte de valores, Transporte de funcionários, Transporte de paciente (exceto ambulância), Escolar, Turismo, Veículos oficiais.
categoriaTaxiVeiculoStringObrigatório quando tipoUso for "Táxi". 5 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura9000: Comum, Comum com ponto privado, Comum rádio táxi, Especial rádio táxi, Luxo. A API rejeita caso seja enviado quando tipoUso não for "Táxi".
utilizacaoLocadoraContratoStringObrigatório quando tipoUso for "Locadora (Contrato)". 8 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura6117: Transporte de funcionários, Táxi, Lotação - Com cobrança de passagem, Lotação - Sem cobrança de passagem, Turismo, Prestação de serviços, Representação Comercial/Vendas, Transporte de carga. A API rejeita caso seja enviado quando tipoUso não for "Locadora (Contrato)".
usoComercialDoisOuMaisDiasStringObrigatório quando tipoUso for "Particular". Valores: "Sim" ou "Não". A API rejeita caso seja enviado quando tipoUso não for "Particular".
usoTrabalhoStringUso do veículo para trabalho. 6 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura191: "Sim e o mantém em garagem (portão manual)", "Sim e o mantém em garagem (portão automático/porteiro)", "Sim e o mantém em estacionamento privado, pago ou fechado", "Sim, mas o mantém fora de garagem (na rua)", "Não utiliza o veículo para se locomover ao local de trabalho", "Não trabalha".
usoEstudoStringUso do veículo para estudo. 6 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura192: "Sim e o guarda em garagem (portão manual)", "Sim e o guarda em garagem (portão automático/porteiro)", "Sim e o guarda em estacionamento privado pago ou fechado", "Sim, mas o mantém fora de garagem ('na rua')", "Não utiliza o veículo para se locomover ao local de estudo", "Não estuda".

➕ Objeto: complementares

Campo Tipo Descrição
tipoGaragemStringTipo de garagem (select Padrao2000_Cobertura190 na P4). 4 valores oficiais no portal: Sim, com portão manual, Sim, com portão automático, ou porteiro, Sim, em estacionamento privado pago ou fechado., Não. O validator aceita qualquer string; o worker faz busca parcial no Select2 (strings curtas como "Portão automático" casam).
relacaoSeguradoProprietarioString"Sim" ou "Não".
relacaoSeguradoComProprietarioStringObrigatório quando relacaoSeguradoProprietario for "Não". Select Padrao2000_Cobertura7181 na P4. 15 valores oficiais: Próprio, Ascendentes, Cônjuge, Descendentes, enteado, Empregado, Espólio, Executivo, Irmãos e/ou parentes até 2 grau, Leasing, Sócio, Outros, Própria empresa (PJ), Empresas do mesmo grupo e quadro societário, Representantes legais da empresa, Alugados (com contrato). O validator aceita qualquer string; busca parcial no Select2.
proprietarioCpfStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". CPF do proprietário (apenas números).
proprietarioNomeStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Nome do proprietário.
proprietarioNomeSocialString (Opcional)Nome social do proprietário.
proprietarioSexoStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". "Masculino" ou "Feminino". O validator aceita maiúsculas/minúsculas indistintamente.
proprietarioNascimentoStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Data de nascimento (DD/MM/AAAA).
proprietarioEstadoCivilStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Valores aceitos: Solteiro(a), Casado(a), Viúvo(a), Divorciado(a), Separado(a), União estável. O validator é tolerante a maiúsculas/minúsculas e acentos.
principalCondutorString (Opcional)"Sim" ou "Não". Recomendado enviar "Sim" para manter o fluxo mais simples e evitar a abertura de campos adicionais no portal. Se omitido, a automação mantém o valor padrão do portal. Quando omitido, a API permite enviar os campos do principal condutor; se enviar qualquer dado além de principalCondutorRelacaoSegurado, então CPF, Nome, Sexo, Nascimento e Estado Civil passam a ser obrigatórios.
principalCondutorRelacaoSeguradoString (Opcional)Select Padrao2000_Condutor01_Propriosegurado na P4. 10 valores oficiais: Conjuge, Pai, Mãe, Filho(a), Irmão(ã), Outro(s), Motorista Particular, Diretor/Sócio/Dirigente, Funcionário/Empregado. Quando principalCondutor for omitido, este campo pode ser enviado sozinho; se enviar outros dados do principal condutor, CPF, Nome, Sexo, Nascimento e Estado Civil passam a ser obrigatórios.
principalCondutorCpfString (Numeric)Obrigatório quando principalCondutor for "Não" (Regra 10), ou quando outros sub-campos do principal condutor forem enviados sem principalCondutor. CPF do principal condutor (apenas números, 11 dígitos).
principalCondutorNomeStringObrigatório quando principalCondutor for "Não" (Regra 10), ou quando outros sub-campos do principal condutor forem enviados sem principalCondutor. Nome do principal condutor.
principalCondutorNomeSocialString (Opcional)Nome social do principal condutor.
principalCondutorSexoStringObrigatório quando principalCondutor for "Não" (Regra 10), ou quando outros sub-campos do principal condutor forem enviados sem principalCondutor. "Masculino" ou "Feminino". O validator aceita maiúsculas/minúsculas indistintamente.
principalCondutorNascimentoStringObrigatório quando principalCondutor for "Não" (Regra 10), ou quando outros sub-campos do principal condutor forem enviados sem principalCondutor. Data de nascimento (DD/MM/AAAA).
principalCondutorEstadoCivilStringObrigatório quando principalCondutor for "Não" (Regra 10), ou quando outros sub-campos do principal condutor forem enviados sem principalCondutor. Valores aceitos: Solteiro(a), Casado(a), Viúvo(a), Divorciado(a), Separado(a), União estável. O validator é tolerante a maiúsculas/minúsculas e acentos.
ramoAtividadeComercialProfissionalStringObrigatório quando veiculo.tipoUso não for "Particular". 37 valores aceitos (case/acento-insensível) — descobertos ao vivo no select Padrao2000_Cobertura74150. Ver lista completa no Swagger (/api-docsComplementares.ramoAtividadeComercialProfissional). A API rejeita caso seja enviado quando veiculo.tipoUso for "Particular".
profissaoPrincipalCondutorStringObrigatório quando veiculo.tipoUso não for "Particular". Lista oficial no portal (Padrao2000_Condutor01_Profissao) tem mais de 500 profissões. Por causa do volume, o validator aceita qualquer string e o worker faz busca parcial no portal. Exemplos seguros: Motorista Profissional, Outros, Aposentado, Estudante, Funcionário Público, Empresário.
seguroCorretorProximoString"Sim" ou "Não".
condutoresQueUtilizamString (Opcional)Só se aplica quando veiculo.tipoUso for "Transporte por aplicativos - Veículo próprio" ou "Transporte de funcionários" — "Informar os condutores que utilizam o veículo?" (select Padrao2000_Cobertura7998 da P4, inspecionado ao vivo em jun/2026). 3 valores aceitos (case/acento-insensível): É utilizado por um único condutor, É utilizado por dois condutores, É utilizado por três condutores. O portal só exibe — e torna obrigatório — este campo para esses tipos de uso; quando visível e omitido no payload, o worker aplica o default É utilizado por um único condutor. Para os demais tipos de uso é ignorado (warn no log se enviado).
tipoResidenciaStringEx: "Casa/sobrado", "Apartamento".
pessoas17a25String"Sim" ou "Não".

➕ Objeto: cobertura

Campo Tipo Descrição
planoString (Opcional)Plano de cobertura (Página 5). Se omitido, o portal mantém o padrão "FÁCIL". Valores aceitos (case-insensitive): "facil", "pleno", "total", "personalizado".
modalidadeString (Opcional)Modalidade (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Valor de Mercado").
percentualAjusteString (Opcional)% Ajuste (Página 5). Campo numérico opcional (ex.: "100", "95,5"). Se omitido, mantém o padrão do portal.
franquiaPrimeiraOpcaoString (Opcional)Primeira opção de franquia (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Normal 100%").
franquiaSegundaOpcaoString (Opcional)Segunda opção de franquia (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Reduzida 50%").
danosMateriaisTerceirosString (Opcional)Danos materiais a terceiros (Página 5) selecionado no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "100.000,00").
danosCorporaisTerceirosString (Opcional)Danos corporais a terceiros (Página 5) selecionado no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "100.000,00").
appMortePorPassageiroString (Opcional)APP Morte (por passageiro) (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
appInvalidezPorPassageiroString (Opcional)APP Invalidez (por passageiro) (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
danosMoraisString (Opcional)Danos morais (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
despesasExtrasString (Opcional)Despesas extras (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Não contratada").
maisAssistenciasString/Boolean (Opcional)+ Assistências (Página 5). Envie "Sim" (ou true) para clicar no botão de abrir assistências. Se omitido, mantém o padrão do portal.
maisAssistenciasSeguradorasString (Opcional)Seguradora específica para + Assistências (ex.: "allianz"). Só é aplicada quando maisAssistencias for "Sim". Se omitido, mantém todas selecionadas no portal. Se seguro.seguradorasDisponiveis for enviado, esta seguradora deve estar presente nele.

Exemplos de uso:

"cobertura": { "plano": "facil" }
"cobertura": { "plano": "pleno" }
"cobertura": { "plano": "total" }
"cobertura": { "plano": "personalizado" }
"cobertura": { "modalidade": "Valor de Mercado" }
"cobertura": { "plano": "pleno", "modalidade": "Valor de Mercado" }
"cobertura": { "percentualAjuste": "100" }
"cobertura": { "plano": "pleno", "modalidade": "Valor de Mercado", "percentualAjuste": "95,5" }
"cobertura": { "franquiaPrimeiraOpcao": "Normal 100%" }
"cobertura": { "plano": "pleno", "franquiaPrimeiraOpcao": "Normal 100%" }
"cobertura": { "franquiaSegundaOpcao": "Reduzida 50%" }
"cobertura": { "plano": "pleno", "franquiaPrimeiraOpcao": "Normal 100%", "franquiaSegundaOpcao": "Reduzida 50%" }
"cobertura": { "danosMateriaisTerceiros": "100.000,00" }
"cobertura": { "plano": "pleno", "danosMateriaisTerceiros": "100.000,00" }
"cobertura": { "danosCorporaisTerceiros": "100.000,00" }
"cobertura": { "plano": "pleno", "danosCorporaisTerceiros": "100.000,00" }
"cobertura": { "appMortePorPassageiro": "10.000,00" }
"cobertura": { "plano": "pleno", "appMortePorPassageiro": "10.000,00" }
"cobertura": { "appInvalidezPorPassageiro": "10.000,00" }
"cobertura": { "plano": "pleno", "appInvalidezPorPassageiro": "10.000,00" }
"cobertura": { "danosMorais": "10.000,00" }
"cobertura": { "plano": "pleno", "danosMorais": "10.000,00" }
"cobertura": { "despesasExtras": "Não contratada" }
"cobertura": { "plano": "pleno", "despesasExtras": "Não contratada" }
"cobertura": { "maisAssistencias": "Sim" }
"cobertura": { "maisAssistencias": "Sim", "maisAssistenciasSeguradoras": "allianz" }

📦 Exemplos de Payloads Completos

Exemplo 0 - Payload pronto para teste (resiliência de seletores):

Exemplo 1 - Fluxo simples (rápido até Cobertura):

{
  "id": "COT_EXEMPLO_001",
  "segurado": {
    "cpf": "12345678900",
    "nomeSocial": "Cliente Exemplo",
    "telefone": "11999999999",
    "email": "cliente.exemplo@teste.com",
    "cep": "01001000"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR"
  },
  "veiculo": {
    "placa": "ABC1D23",
    "chassiRemarcado": "Não",
    "financiado": "Não",
    "antifurto": "Não",
    "cepPernoite": "01001000",
    "cepCirculacao": "01001000",
    "kmMes": "800",
    "tipoUso": "Particular",
    "usoTrabalho": "Não",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão manual",
    "relacaoSeguradoProprietario": "Sim",
    "principalCondutor": "Sim",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Casa/sobrado",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "pleno"
  }
}

Exemplo 2 - Cobertura com vários campos:

{
  "id": "COT_EXEMPLO_002",
  "segurado": {
    "cpf": "22233344455",
    "nomeSocial": "Cliente Cobertura Completa",
    "telefone": "11988887777",
    "email": "cobertura.completa@teste.com",
    "cep": "01310930"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR"
  },
  "veiculo": {
    "placa": "DEF2G34",
    "chassiRemarcado": "Não",
    "financiado": "Não",
    "antifurto": "Não",
    "cepPernoite": "01310930",
    "cepCirculacao": "01310930",
    "kmMes": "1200",
    "tipoUso": "Particular",
    "usoTrabalho": "Não",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão automático",
    "relacaoSeguradoProprietario": "Sim",
    "principalCondutor": "Sim",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Apartamento",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "personalizado",
    "modalidade": "Valor de Mercado",
    "percentualAjuste": "95,5",
    "franquiaPrimeiraOpcao": "Normal 100%",
    "franquiaSegundaOpcao": "Reduzida 50%",
    "danosMateriaisTerceiros": "100.000,00",
    "danosCorporaisTerceiros": "100.000,00",
    "appMortePorPassageiro": "10.000,00",
    "appInvalidezPorPassageiro": "10.000,00",
    "danosMorais": "10.000,00",
    "despesasExtras": "Não contratada"
  }
}

Exemplo 3 - Seguradoras selecionadas + maioria dos campos preenchidos:

{
  "id": "COT_EXEMPLO_003",
  "segurado": {
    "cpf": "33344455566",
    "nomeSocial": "Cliente Perfil Completo",
    "telefone": "11977776666",
    "email": "perfil.completo@teste.com",
    "cep": "04538132"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR",
    "seguradorasDisponiveis": ["allianz", "porto", "tokio", "hdi seguros"],
    "bonusAllianz": "5",
    "bonusPortoAzulItau": "4",
    "bonusTokio": "3",
    "bonusHdi": "2"
  },
  "veiculo": {
    "placa": "GHI3J45",
    "chassiRemarcado": "Não",
    "financiado": "Sim",
    "alienacaoFiduciaria": "BANCO EXEMPLO",
    "antifurto": "Não",
    "cepPernoite": "04538132",
    "cepCirculacao": "04538132",
    "kmMes": "1500",
    "tipoUso": "Particular",
    "usoTrabalho": "Sim",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não",
    "blindagem": "Não",
    "kitGas": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão automático",
    "relacaoSeguradoProprietario": "Não",
    "relacaoSeguradoComProprietario": "Cônjuge",
    "proprietarioCpf": "55566677788",
    "proprietarioNome": "Patrícia Exemplo",
    "proprietarioSexo": "Feminino",
    "proprietarioNascimento": "20/11/1988",
    "proprietarioEstadoCivil": "Casado(a)",
    "principalCondutor": "Não",
    "principalCondutorRelacaoSegurado": "Cônjuge",
    "principalCondutorCpf": "55566677788",
    "principalCondutorNome": "Patrícia Exemplo",
    "principalCondutorSexo": "Feminino",
    "principalCondutorNascimento": "20/11/1988",
    "principalCondutorEstadoCivil": "Casado(a)",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Apartamento",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "total",
    "modalidade": "Valor de Mercado",
    "percentualAjuste": "100",
    "franquiaPrimeiraOpcao": "Normal 100%",
    "franquiaSegundaOpcao": "Reduzida 50%",
    "danosMateriaisTerceiros": "100.000,00",
    "danosCorporaisTerceiros": "100.000,00",
    "appMortePorPassageiro": "10.000,00",
    "appInvalidezPorPassageiro": "10.000,00",
    "danosMorais": "10.000,00",
    "despesasExtras": "Não contratada"
  }
}

💻 Exemplos de Integração

Via cURL (Terminal)

curl -X POST http://localhost:3000/cotacao \
-H "Content-Type: application/json" \
-d '{
  "id": "COT_12345",
  "segurado": { "cpf": "12345678900", "nomeSocial": "João Silva" },
  ...
}'

Via JavaScript (Fetch API)

const response = await fetch('http://localhost:3000/cotacao', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(dadosCotacao)
});

const result = await response.json();
console.log(result.message);

⚠️ Tratamento de Erros

A API utiliza códigos de status HTTP padrão:

Exemplo de erro (400):

{
  "error": "Dados incompletos ou inválidos",
  "details": [
    "Campo segurado.cpf é obrigatório e está vazio",
    "Campo veiculo.placa é obrigatório e está vazio"
  ]
}

⚠️ Campos desconhecidos (validação estrita)

Se o JSON contiver um nome de campo incorreto, a API retornará 400 informando o campo inválido e sugerindo o nome correto quando possível.

{
  "error": "Dados incompletos ou inválidos",
  "details": [
    "Item 0: Campo veiculo.antifurtoBradesco não é suportado. Use veiculo.alarmeSonoroAntiFurtoBradesco"
  ]
}

📝 Observações Importantes

📡 Webhook (notificação automática ao final da cotação)

Ao final do worker (quando a cotação é processada com sucesso), a API envia automaticamente um POST ao endpoint configurado pela variável de ambiente WEBHOOK_URL, com os prêmios extraídos. Não há retry nem fila.

Configuração (variáveis de ambiente)

VariávelObrigatório?Uso
WEBHOOK_URLPara ativar o webhookURL completa do destinatário (POST).
WEBHOOK_CLIENT_KEYPara ativar o webhookEnviado como header x-client-key.
WEBHOOK_CLIENT_SECRETPara ativar o webhookEnviado como header x-client-secret.

Se qualquer das 3 variáveis estiver ausente, o webhook é silenciosamente pulado (apenas um warn no log). Timeout: 15s. Falhas no destinatário são logadas mas não afetam o worker.

Payload

{
  "cotacaoId": "27c08695-0361-4eed-9eb7-bf723c2636ee",
  "seguradoCpf": "34683964813",
  "capturadoEm": "2026-06-09T15:53:09.765Z",
  "totalCardsDetectados": 10,
  "totalCardsAproveitados": 7,
  "temPremios": true,
  "cards": [ /* lista de objetos com seguradora, prêmios, coberturas */ ]
}

Quando temPremios = false

O webhook sempre é chamado mesmo sem prêmios. Use o campo temPremios para roteamento (não confie em cards.length diretamente). O campo opcional mensagem traz a explicação legível:

{
  "cotacaoId": "V3-turismo",
  "totalCardsDetectados": 10,
  "totalCardsAproveitados": 0,
  "temPremios": false,
  "mensagem": "Portal renderizou 10 card(s), mas nenhum tinha conteúdo extraível (todos retornaram 'sem retorno da cotação' ou similar). Comum em cotações com tipoUso != Particular onde o portal não calcula prêmios para a combinação enviada.",
  "cards": []
}

Causas comuns de temPremios=false:

📝 Documentação Interativa

Para testar os campos em tempo real e ver o esquema completo, acesse o Swagger UI:
👉 http://localhost:3000/api-docs