{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/loggi/main/json-schema/loggi-quote-request-schema.json", "title": "QuoteRequest", "description": "Objeto que representa a criação de uma cotação.", "x-generated": "2026-10-14", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/loggi-freight-price-quotation-openapi.yml#/components/schemas/QuoteRequest", "type": "object", "required": [ "shipFrom", "shipTo" ], "properties": { "shipFrom": { "type": "object", "nullable": false, "oneOf": [ { "type": "object", "properties": { "correios": { "type": "object", "required": [ "logradouro", "cep", "cidade", "uf" ], "properties": { "logradouro": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Nome da rua. Tamanho mínimo 1 caractere e Tamanho máximo 128 caracteres." }, "numero": { "type": "string", "minLength": 0, "maxLength": 8, "description": "Número do endereço. Tamanho máximo 8 caracteres. Caso não possua número, informar com os valores S/N ou s/n" }, "complemento": { "type": "string", "minLength": 0, "maxLength": 128, "description": "Informações adicionais para facilitar a localização. Tamanho máximo 128 caracteres." }, "bairro": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Para endereços de Brasília, procure mais informações nos Correios. Em casos que seja usado regiões adminstrativas e se existir bairro, informe entre parentêses. Tamanho mínimo 1 caractere e Tamanho máximo 64 caracteres." }, "cep": { "type": "string", "minLength": 8, "maxLength": 8, "description": "CEP do endereço com 8 dígitos." }, "cidade": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Cidade do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "uf": { "type": "string", "minLength": 2, "maxLength": 2, "description": "Unidade federativa com dois caracteres." } }, "description": "Objeto que contém informações detalhadas do endereço compatível com o formato da API dos Correios." } } }, { "type": "object", "properties": { "lines": { "type": "object", "required": [ "addressLine1", "postalCode", "city", "state" ], "properties": { "addressLine1": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Primeira linha que contempla os dados do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 256 caracteres." }, "addressLine2": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Segunda linha que complementa os dados de endereço descritos em addressLine1. Tamanho máximo 256 caracteres." }, "postalCode": { "type": "string", "minLength": 1, "maxLength": 16, "description": "Código postal do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 16 caracteres." }, "city": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Cidade do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "state": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Estado do Endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "country": { "type": "string", "minLength": 1, "maxLength": 100, "description": "País do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 100 caracteres." } }, "description": "Representação alternativa de endereços utilizando duas linhas e outros componentes." } } }, { "type": "object", "properties": { "widget": { "type": "object", "required": [ "address" ], "properties": { "address": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Dados do endereço. Tamanho máximo 256 caracteres." }, "complement": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Complemento do endereço. Tamanho máximo 256 caracteres." }, "placesApiInfo": { "type": "object", "properties": { "placeId": { "type": "string", "description": "Um place ID é um identificador textual que identifica exclusivamente um local." }, "sessionId": { "type": "string", "description": "Uma string randômica que identifica uma sessão de autocomplete para fins de faturamento." } }, "description": "Informações fornecidas pelo Google Maps Place API." }, "userContext": { "type": "object", "properties": { "userIp": { "type": "string", "description": "O endereço IPv4 ou IPv6 do usuário." }, "position": { "type": "object", "properties": { "latitude": { "type": "number", "description": "A latitude em graus. Deve estar na faixa [-90,0, +90,0]." }, "longitude": { "type": "number", "description": "A longitude em graus. Deve estar na faixa [-180,0, +180,0]." } }, "description": "Posição do usuário utilizando LatLng do Google. https://github.com/googleapis/googleapis/blob/master/google/type/latlng.proto" } }, "description": "Contexto sobre o usuário." } }, "description": "Representação de endereço utilizando Autocomplete UI Widget + context." } } } ], "description": "Objeto que representa um endereço nacional em formato dos Correios ou uma representação alternativa de endereços. Os objetos correios, lines e widget são mutuamente exclusivos." }, "shipTo": { "type": "object", "nullable": false, "oneOf": [ { "type": "object", "properties": { "correios": { "type": "object", "required": [ "logradouro", "cep", "cidade", "uf" ], "properties": { "logradouro": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Nome da rua. Tamanho mínimo 1 caractere e Tamanho máximo 128 caracteres." }, "numero": { "type": "string", "minLength": 0, "maxLength": 8, "description": "Número do endereço. Tamanho máximo 8 caracteres. Caso não possua número, informar com os valores S/N ou s/n" }, "complemento": { "type": "string", "minLength": 0, "maxLength": 128, "description": "Informações adicionais para facilitar a localização. Tamanho máximo 128 caracteres." }, "bairro": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Para endereços de Brasília, procure mais informações nos Correios. Em casos que seja usado regiões adminstrativas e se existir bairro, informe entre parentêses. Tamanho mínimo 1 caractere e Tamanho máximo 64 caracteres." }, "cep": { "type": "string", "minLength": 8, "maxLength": 8, "description": "CEP do endereço com 8 dígitos." }, "cidade": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Cidade do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "uf": { "type": "string", "minLength": 2, "maxLength": 2, "description": "Unidade federativa com dois caracteres." } }, "description": "Objeto que contém informações detalhadas do endereço compatível com o formato da API dos Correios." } } }, { "type": "object", "properties": { "lines": { "type": "object", "required": [ "addressLine1", "postalCode", "city", "state" ], "properties": { "addressLine1": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Primeira linha que contempla os dados do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 256 caracteres." }, "addressLine2": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Segunda linha que complementa os dados de endereço descritos em addressLine1. Tamanho máximo 256 caracteres." }, "postalCode": { "type": "string", "minLength": 1, "maxLength": 16, "description": "Código postal do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 16 caracteres." }, "city": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Cidade do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "state": { "type": "string", "minLength": 1, "maxLength": 32, "description": "Estado do Endereço. Tamanho mínimo 1 caractere e Tamanho máximo 32 caracteres." }, "country": { "type": "string", "minLength": 1, "maxLength": 100, "description": "País do endereço. Tamanho mínimo 1 caractere e Tamanho máximo 100 caracteres." } }, "description": "Representação alternativa de endereços utilizando duas linhas e outros componentes." } } }, { "type": "object", "properties": { "widget": { "type": "object", "required": [ "address" ], "properties": { "address": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Dados do endereço. Tamanho máximo 256 caracteres." }, "complement": { "type": "string", "minLength": 0, "maxLength": 256, "description": "Complemento do endereço. Tamanho máximo 256 caracteres." }, "placesApiInfo": { "type": "object", "properties": { "placeId": { "type": "string", "description": "Um place ID é um identificador textual que identifica exclusivamente um local." }, "sessionId": { "type": "string", "description": "Uma string randômica que identifica uma sessão de autocomplete para fins de faturamento." } }, "description": "Informações fornecidas pelo Google Maps Place API." }, "userContext": { "type": "object", "properties": { "userIp": { "type": "string", "description": "O endereço IPv4 ou IPv6 do usuário." }, "position": { "type": "object", "properties": { "latitude": { "type": "number", "description": "A latitude em graus. Deve estar na faixa [-90,0, +90,0]." }, "longitude": { "type": "number", "description": "A longitude em graus. Deve estar na faixa [-180,0, +180,0]." } }, "description": "Posição do usuário utilizando LatLng do Google. https://github.com/googleapis/googleapis/blob/master/google/type/latlng.proto" } }, "description": "Contexto sobre o usuário." } }, "description": "Representação de endereço utilizando Autocomplete UI Widget + context." } } } ], "description": "Objeto que representa um endereço nacional em formato dos Correios ou uma representação alternativa de endereços. Os objetos correios, lines e widget são mutuamente exclusivos." }, "packages": { "type": "array", "nullable": false, "description": "Lista de pacotes associado à cotação de frete.", "items": { "type": "object", "required": [ "weightG", "lengthCm", "widthCm", "heightCm", "goodsValue" ], "properties": { "weightG": { "type": "integer", "maximum": 30000, "format": "int32", "description": "Peso do pacote em gramas. Valor máximo 30000." }, "lengthCm": { "type": "integer", "maximum": 100, "format": "int32", "description": "Comprimento do pacote em centímetros. Valor máximo 100." }, "widthCm": { "type": "integer", "maximum": 100, "format": "int32", "description": "Largura do pacote em centrímetros. Valor máximo 100." }, "heightCm": { "type": "integer", "maximum": 100, "format": "int32", "description": "Altura do pacote em centímetros. Valor máximo 100." }, "goodsValue": { "type": "object", "required": [ "currencyCode", "units", "nanos" ], "properties": { "currencyCode": { "type": "string", "description": "Código de três letras para as moedas definido no ISO 4217." }, "units": { "type": "string", "description": "Todas as unidades do montante.", "format": "int64" }, "nanos": { "type": "integer", "description": "Componente fracionário em nanos, i.e., centavos vezes 10 milhões. Ler mais em https://github.com/googleapis/googleapis/blob/master/google/type/money.proto", "format": "int32" } }, "description": "Valor total de todos os produtos a serem transportados dentro de um pacote. Há um valor máximo em reais, consulte nosso time de vendas para mais detalhes." } } } } }, "oneOf": [ { "type": "object", "required": [ "externalServiceIds" ], "properties": { "externalServiceIds": { "type": "array", "description": "Lista de identificadores externos do serviço. Preencher este campo ou o campo pickupTypes. Nunca ambos.", "items": { "type": "string" } } } }, { "type": "object", "required": [ "pickupTypes" ], "properties": { "pickupTypes": { "deprecated": true, "type": "array", "nullable": false, "description": "Lista de tipos de coleta. Preencher este campo ou o campo externalServiceIds. Nunca ambos.", "items": { "type": "string", "enum": [ "PICKUP_TYPE_SPOT", "PICKUP_TYPE_DEDICATED", "PICKUP_TYPE_MILK_RUN", "PICKUP_TYPE_DROP_OFF" ] } } } } ] }