Pular para o conteúdo principal

Criar cotação

Precifica uma seleção de produtos e coberturas para um cliente. A cotação é uma calculadora: nada é persistido e nenhum recurso é criado. O pedido usa exatamente a mesma lista products[] e é reprecificado com o mesmo motor no momento da submissão.

A cotação é indicativa

Cotação e pedido rodam contra a configuração vigente — não há token de cotação, snapshot de tarifa nem prazo de validade. Se a tarifa ou a configuração do produto mudar entre a cotação e a submissão, o preço muda: o preço calculado na submissão do pedido é o que vale.

Uma cotação pode combinar vários produtos, cada um segurando o seu próprio objeto de risco. O caso típico: um carro vendido com financiamento gera um pedido com o produto prestamista (objeto de risco = a operação de crédito) e o produto auto (objeto de risco = o veículo).

Request

ENDPOINT
/v1/insurance/quote
MÉTODO
POST

Para produtos de prateleira — vendidos como estão, com as coberturas padrão e a comissão padrão da sua integração — a linha do produto precisa apenas de product_key, term e risk_object. É o cenário ideal para quem vende produtos fixos, sem personalização:

Request Body — produto de prateleira
{
"products": [
{
"product_key": "9d1f8c7a-3b21-4e60-8a2f-1c5d7e9b0a44",
"term": {
"start_date": "2026-07-16",
"end_date": "2028-07-15"
},
"risk_object": {
"type": "credit_operation",
"insurable_value": 50000.00,
"attributes": {
"installment_amount": 1050.00,
"number_of_installments": 48
}
}
}
],
"customer": {
"date_of_birth": "1987-03-22",
"occupation_code": "211205"
}
}

Com services omitido, todas as coberturas com configuração padrão da sua integração são preenchidas automaticamente; com commission_data omitido, vale o default_rate da faixa commission_bounds do produto.

Para personalizar a seleção — escolher coberturas, importância segurada, franquia, carência ou a comissão — envie services e commission_data explicitamente:

Request Body — seleção personalizada
{
"products": [
{
"product_key": "9d1f8c7a-3b21-4e60-8a2f-1c5d7e9b0a44",
"commission_data": {
"commission_type": "percentage_of_gross_premium",
"value": 0.1000
},
"term": {
"start_date": "2026-07-16",
"end_date": "2028-07-15"
},
"services": [
{
"service_key": "0a3c5e7f-2b4d-4a6c-8e0f-1a3b5c7d9e2f",
"insured_amount_basis": "monetary_amount",
"insured_amount": 50000.00
}
],
"risk_object": {
"type": "credit_operation",
"insurable_value": 50000.00,
"attributes": {
"installment_amount": 1050.00,
"number_of_installments": 48
}
}
}
],
"customer": {
"date_of_birth": "1987-03-22",
"occupation_code": "211205"
}
}

Atributos do request

CampoTipoObrigatoriedadeDescrição
productsarrayobrigatórioA seleção de produtos a precificar, campo de topo do request — o mesmo formato usado no pedido. Um item por produto.
customerobjectopcionalDados do segurado usados na precificação e na avaliação de elegibilidade, em objeto plano (sem wrapper). Quando omitido, a elegibilidade não é avaliada (eligibility retorna not_evaluated) — e produtos cuja tarifa depende de dados do cliente são rejeitados com NOT_PRICEABLE.

Objeto em products

CampoTipoObrigatoriedadeDescrição
product_keystringobrigatórioChave do produto no catálogo.
commission_dataobjectopcionalA forma de comissão desejada (veja abaixo). Quando omitida, vale o default_rate da faixa commission_bounds do produto.
termobjectobrigatórioVigência do produto, em datas absolutas: { "start_date": "AAAA-MM-DD", "end_date": "AAAA-MM-DD" }. Obrigatório em todo item — não há forma por duração nem vigência padrão da seleção. Produtos do mesmo pedido podem ter vigências diferentes.
servicesarrayopcionalCoberturas explícitas. Quando omitido ou vazio, todas as coberturas com configuração padrão da sua integração são preenchidas automaticamente.
risk_objectobjectcondicionalO objeto que este produto segura. Obrigatório para produtos de risco valorado (credit_operation, vehicle); omitido quando o objeto do seguro é a própria pessoa (person).

Objeto commission_data

CampoTipoObrigatoriedadeDescrição
commission_typestringobrigatóriopercentage_of_gross_premium (taxa sobre o prêmio bruto), monetary_amount (comissão em R$ fixo, valor-alvo) ou total_gross_premium_amount (preço final desejado ao cliente, valor-alvo). As três formas são mutuamente exclusivas.
valuenumberobrigatórioO valor da forma escolhida: taxa com 4 casas (ex.: 0.1000), valor em R$ (ex.: 61.73) ou preço total (ex.: 650.00).

Em qualquer forma, a taxa efetiva resultante é validada contra a faixa commission_bounds do produto — violação rejeita a linha com OUT_OF_BOUNDS_COMMISSION. Nas formas por valor (monetary_amount, total_gross_premium_amount), o valor é um alvo: o realizado pode variar centavos por arredondamento.

Objeto em services

CampoTipoObrigatoriedadeDescrição
service_keystringobrigatórioChave da cobertura no catálogo. É o único campo obrigatório do item: omitindo os demais, vale a sua configuração padrão para a cobertura.
insured_amount_basisstringcondicionalBase da importância segurada: monetary_amount, percentage_of_risk_value ou unit_amount_times_count. Informar a base torna obrigatório o campo de valor correspondente.
insured_amountnumbercondicionalImportância segurada em reais. Obrigatório quando a base é monetary_amount.
insured_amount_percentagenumbercondicionalPercentual do valor do objeto de risco, em (0, 1] (1.0000 = 100%). Obrigatório quando a base é percentage_of_risk_value; resolvido contra o insurable_value do objeto de risco da linha.
unit_amountnumbercondicionalValor por unidade de indenização (ex.: R$ 100 por diária). Obrigatório, junto com unit_count, quando a base é unit_amount_times_count. Deve pertencer ao envelope indemnity_unit_options da cobertura.
unit_countintegercondicionalQuantidade de unidades de indenização (ex.: 60 diárias). Obrigatório, junto com unit_amount, quando a base é unit_amount_times_count.
deductible_dataobjectopcionalFranquia, na forma tipada { "deductible_type": "monetary_amount", "value": 1500.00 }. O deductible_type deve ser o mesmo do envelope deductible_options da cobertura, e o valor deve pertencer ao espaço de opções.
waiting_period_daysintegeropcionalCarência em dias, dentro das waiting_period_options da cobertura.

Objeto risk_object

CampoTipoObrigatoriedadeDescrição
typestringobrigatórioTipo do objeto de risco: credit_operation, vehicle ou person.
insurable_valuenumbercondicionalValor do objeto de risco. Obrigatório para credit_operation e vehicle; não se aplica a person. Limita a importância segurada das coberturas atreladas ao valor do risco — coberturas de limite estipulado respeitam apenas o próprio maximum_insured_amount.
attributesobjectopcionalAtributos do objeto de risco usados na tarifação, específicos por ramo (ex.: para uma operação de crédito, installment_amount e number_of_installments).

Objeto customer

O objeto é plano — não há wrapper data.

CampoTipoObrigatoriedadeDescrição
document_numberstringopcionalCPF ou CNPJ do segurado.
namestringopcionalNome completo.
emailstringopcionalE-mail.
phone_numberstringopcionalTelefone no formato E.164.
date_of_birthstringopcionalData de nascimento do segurado, no formato YYYY-MM-DD. A idade usada na precificação e nas regras de elegibilidade (ex.: idade máxima no fim da vigência) é derivada dela a cada chamada — não existe campo de idade.
occupation_codestringopcionalCódigo de ocupação do segurado (CBO).
addressobjectopcionalEndereço do segurado, na mesma forma usada no pedido.

Response

STATUS
200
Response Body
{
"total_order_amount": 617.28,
"products": [
{
"product_key": "9d1f8c7a-3b21-4e60-8a2f-1c5d7e9b0a44",
"name": "Prestamista Master",
"provider_name": "QI Seguradora",
"product_category": "insurance",
"insurance_class": {
"name": "credit_life",
"class_number": "0977",
"group_number": "09"
},
"contract_instrument_type": "ticket",
"regulator_registration": "15414.900388/2015-21",
"result": "priced",
"term": {
"start_date": "2026-07-16",
"end_date": "2028-07-15"
},
"gross_premium_amount": 617.28,
"iof_amount": 2.35,
"net_premium_amount": 614.93,
"services": [
{
"service_key": "0a3c5e7f-2b4d-4a6c-8e0f-1a3b5c7d9e2f",
"service_type": {
"code": "credit_life",
"name": "Prestamista (Credit Life)"
},
"service_category": "insurance",
"regulator_registration": null,
"insured_amount": 50000.00,
"unit_amount": null,
"unit_count": null,
"deductible_data": {
"deductible_type": "monetary_amount",
"value": 1500.00
},
"waiting_period_days": 30,
"service_attributes": {},
"gross_premium_amount": 617.28
}
]
}
],
"eligibility": "eligible"
}

Atributos da resposta

CampoTipoDescrição
total_order_amountnumberSoma dos prêmios brutos dos produtos precificados (priced), com IOF.
productsarrayResultado por produto. Cada linha é avaliada de forma independente: um produto rejeitado nunca contamina os demais na cotação (no pedido, qualquer linha rejeitada recusa a submissão inteira, que retorna erro 422).
eligibilitystringVeredito de elegibilidade da cotação: eligible, declined (alguma regra de elegibilidade reprovou) ou not_evaluated (o customer não foi enviado — não é uma aprovação).

Objeto em products

CampoTipoDescrição
product_keystringChave do produto avaliado.
name / provider_namestringNome comercial do produto e da seguradora.
product_categorystringCategoria do produto: insurance, capitalization ou benefit.
insurance_classobjectRamo do seguro: { name, class_number, group_number }. null para produtos não securitários.
contract_instrument_typestringInstrumento contratual do produto: ticket (bilhete) ou policy (apólice). Ecoado aqui para que você conheça o instrumento — e portanto quais métodos de aceite são válidos — antes de coletar o aceite no pedido.
regulator_registrationstringRegistro do produto no regulador.
resultstringpriced (precificado) ou rejected (rejeitado). Presente em toda linha.
termobjectA vigência que você enviou, ecoada. Presente quando priced.
gross_premium_amountnumberPrêmio bruto do produto, com IOF — soma exata dos prêmios das coberturas. Presente quando priced.
iof_amountnumberIOF do produto. Presente quando priced.
net_premium_amountnumberPrêmio líquido do produto, sem IOF. Presente quando priced.
servicesarrayCoberturas precificadas, com o prêmio de cada uma. Presente quando priced.
decline_reasonsarrayMotivos da rejeição, um item { code, detail } por falha subjacente — duas coberturas da mesma linha violando o espaço de opções geram duas entradas sob o mesmo code. Presente apenas quando rejected.

Objeto em services

CampoTipoDescrição
service_keystringChave da cobertura.
service_typeobjectTipo da cobertura: { code, name }.
service_categorystringCategoria da cobertura: insurance, capitalization ou benefit.
regulator_registrationstringRegistro SUSEP próprio da cobertura. null quando a cobertura herda o registro do produto.
insured_amountnumberImportância segurada resolvida — o percentual já aplicado sobre o valor do objeto de risco, o par por unidade já multiplicado. Você nunca a recalcula.
unit_amountnumberValor por unidade de indenização. null quando a cobertura não é precificada por unidade.
unit_countintegerQuantidade de unidades de indenização. null quando a cobertura não é precificada por unidade.
deductible_dataobjectFranquia aplicada: { deductible_type, value }. null quando a cobertura não tem franquia.
waiting_period_daysintegerCarência aplicada, em dias. null quando a cobertura não tem carência — que é diferente de uma carência de 0 dias.
service_attributesobjectAtributos fixos da cobertura, ecoados do catálogo.
gross_premium_amountnumberPrêmio bruto da cobertura, arredondado em 2 casas.

Motivos de rejeição

Quando result é rejected, a linha traz apenas product_key, result e decline_reasons — nada é oferecido, então nada é descrito: sem name, sem classificação, sem term, sem prêmios e sem services. Ramifique sempre pelo result, nunca pela presença de um campo.

A avaliação é por estágios (estrutura → precificação → elegibilidade): os motivos retornados são sempre do mesmo estágio — o primeiro que reprovar — coletados por completo.

Linha rejeitada
{
"product_key": "9d1f8c7a-3b21-4e60-8a2f-1c5d7e9b0a44",
"result": "rejected",
"decline_reasons": [
{
"code": "OUT_OF_OPTION_SPACE",
"detail": "deductible 2000.00 is not in the option list for coverage credit_life"
}
]
}
CódigoSignificado
NOT_ENTITLEDA sua integração não está habilitada para vender este produto.
INACTIVE_PRODUCTO produto está inativo (ou a chave é desconhecida).
INACTIVE_SERVICEUma cobertura selecionada está inativa.
UNKNOWN_SERVICEUma service_key não pertence a este produto.
MISSING_MANDATORY_SERVICEA seleção omite uma cobertura obrigatória do produto.
DEPENDENCY_VIOLATIONA seleção viola as dependências entre coberturas (include/exclude).
OUT_OF_OPTION_SPACEImportância segurada, franquia ou carência fora do espaço de opções da cobertura — inclusive tipo divergente do envelope, valor fora da list/range/step, ou valor enviado para uma cobertura sem franquia/carência (envelope null).
INVALID_INSURED_AMOUNT_BASISA base de importância segurada não é compatível com a linha — ex.: cobertura atrelada ao valor do risco em uma linha sem insurable_value. Vale para qualquer base.
NOT_PRICEABLEO motor não conseguiu produzir um preço: um insumo da tarifa não é resolvível (ex.: a tarifa depende de dados do customer e ele não foi enviado).
ZERO_PREMIUMA linha inteira precificou a custo zero. Uma única cobertura gratuita é válida (sai com gross_premium_amount: 0.00); a linha toda a zero é rejeitada.
INELIGIBLEUma regra de elegibilidade reprovou (ex.: idade máxima no fim da vigência). O detail do item nomeia a regra e os valores que a reprovaram.
OUT_OF_BOUNDS_COMMISSIONA comissão efetiva derivada de commission_data está fora da faixa commission_bounds do produto.
DELEGATED_UNSUPPORTEDProduto com precificação delegada à seguradora — reservado, ainda não suportado.
STALE_DEFAULTUma configuração padrão da sua integração aponta para uma cobertura que não está mais ativa — contate o suporte para atualizar o padrão.

Possíveis erros

Todo erro (non-2xx) retorna o corpo padrão { "title", "description", "translation", "code" } — trate programaticamente apenas o campo code.

StatusCódigoDescrição
400QIT000001Requisição malformada: schema inválido, products vazio, produto sem term, base de importância segurada sem o campo de valor correspondente, insurable_value ausente para credit_operation/vehicle, deductible_data estruturalmente malformado, customer.date_of_birth fora do calendário ou no futuro.
401 / 403Falha de autenticação ou autorização.
429Limite de requisições excedido — repita com backoff.
503Motor de precificação indisponível — a cotação falha rápido, sem preço em cache. Repita a chamada.