📮 Documentação de Consulta de CEP
📋 Visão Geral
A Consulta de CEP é o recurso responsável por retornar os dados de endereço associados a um código postal, seja ele nacional (Brasil) ou internacional.
O endpoint é público — não exige Bearer token — e aceita tanto CEPs no formato com hífen (37757-000) quanto sem hífen (37757000). A normalização é feita automaticamente pelo sistema antes de qualquer consulta.
Os dados retornados incluem logradouro, bairro, cidade, estado, coordenadas geográficas e informações do país, compondo um contrato completo de endereçamento.
🔄 Fluxo Interno
A consulta segue uma cadeia de três etapas, executadas em ordem:
1. Verificação no cache interno
O sistema consulta a tabela interna de CEPs antes de acionar qualquer provedor externo.
Se o registro for encontrado e estiver dentro do prazo de 30 dias (TTL do cache), o resultado é retornado diretamente, sem chamadas externas.
Se o registro existir, mas o prazo de 30 dias tiver sido ultrapassado, o sistema aciona o provedor externo para atualizar os dados e renova o cache automaticamente.
2. Consulta via ViaCEP (Brasil)
Quando o código de país informado é BRA e o registro não está em cache (ou está desatualizado), o sistema consulta a API ViaCEP para obter os dados do CEP.
Em caso de falha no servidor do ViaCEP, o sistema utiliza os dados do cache expirado, se disponíveis, evitando interrupção de serviço.
3. Consulta via ZipCodeBase (Internacional)
Para todos os outros países, o sistema utiliza a API ZipCodeBase para localizar o código postal internacionalmente.
A chave de integração é gerenciada internamente via variável de ambiente e não é exposta ao consumidor da API.
🗃️ Entidades Envolvidas
Resultado da Consulta (ConsultZipCodeDMC)
Representa o contrato de resposta retornado ao consumidor após a resolução do CEP. Contém:
zipCode— código postal consultado, sempre sem hífen.publicPlace— logradouro (rua, avenida, alameda etc.).complement— complemento do endereço; pode sernullquando não disponível.district— bairro.city— cidade.stateCode— código do estado no formato{sigla do país}-{sigla do estado}(por exemplo,BR-SP).latitude— latitude de referência do CEP.longitude— longitude de referência do CEP.countryName— nome completo do país (por exemplo,BRAZIL).countryCodeAlpha2— sigla de dois caracteres do país (por exemplo,BR).countryCodeAlpha3— sigla de três caracteres do país (por exemplo,BRA).ddi— código DDI do país.currency— código da moeda do país.- Hífens são removidos automaticamente: o valor
37757-000é normalizado para37757000antes da consulta. O consumidor pode enviar o CEP em qualquer formato. - TTL de cache de 30 dias: registros com mais de 30 dias são considerados desatualizados e provocam uma nova consulta ao provedor externo, atualizando a entrada na base interna.
- CEPs desativados: se um CEP que existia na base interna não for mais encontrado nos provedores externos, ele é marcado como desativado. Consultas subsequentes a esse CEP retornarão o erro
UAPPI_INTEGRATION_SHIPPING_ZIPCODE_DISABLED. - Rota pública: o endpoint utiliza o middleware
PublicAuthe não requer autenticação por Bearer token. - Coordenadas no Brasil: para CEPs nacionais consultados via ViaCEP, os campos
latitudeelongitudesão retornados com valor0por limitação do provedor.
📌 Notas e Considerações
🔍 Consulta de CEP
/shipping/zipcode/consult/{countryCode}/{zipCode}
Retorna os dados de endereço associados a um código postal nacional ou internacional
📄 Descrição
Endpoint utilizado para consultar os dados de endereço de um código postal, informando o código do país e o CEP desejado.
O sistema verifica o cache interno antes de acionar qualquer provedor externo. Para o Brasil (BRA), utiliza a API ViaCEP; para os demais países, utiliza a API ZipCodeBase.
Esta é uma rota pública — não requer Bearer token. Hífens no CEP são removidos automaticamente pelo sistema.
📋 Parâmetros
🔗 Parâmetros da URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
countryCode | string | Sim | Código do país no formato Alpha-3 (por exemplo, BRA, USA, ARG) |
zipCode | string | Sim | Código postal a ser consultado, com ou sem hífen (por exemplo, 01310100 ou 01310-100) |
💡 Exemplo de Requisição
1curl --request GET \2 --url {{MAIN_URL}}/shipping/zipcode/consult/BRA/01310100 \3 --header "Accept: application/json"✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "status": true,3 "data": {4 "zipCode": "01310100",5 "publicPlace": "Avenida Paulista",6 "complement": "de 612 a 1510 - lado par",7 "district": "Bela Vista",8 "city": "São Paulo",9 "stateCode": "BR-SP",10 "latitude": "0",11 "longitude": "0",12 "countryName": "Brasil",13 "countryCodeAlpha2": "BR",14 "countryCodeAlpha3": "BRA",15 "ddi": "+55",16 "currency": "BRL"17 }18}⚠️ Possíveis Erros
> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | HTTP | Descrição |
|---|---|---|
UAPPI_INTEGRATION_SHIPPING_COUNTRY_NOT_FOUND | 404 | ❌ O código de país informado não foi encontrado na plataforma. |
UAPPI_INTEGRATION_SHIPPING_ZIPCODE_NOT_FOUND | 404 | ❌ O CEP informado não foi localizado em nenhum provedor externo. |
UAPPI_INTEGRATION_SHIPPING_ZIPCODE_DISABLED | 422 | ❌ O CEP existe na base interna, mas foi desativado por não ser mais encontrado nos provedores externos. |
UAPPI_INTEGRATION_SHIPPING_ZIPCODE_SEARCH_FAIL | 500 | ❌ Falha na comunicação com o provedor externo ao tentar localizar o CEP. |
Cotação de Frete
/publics/products/quote
Calcula opções e valores de frete para uma lista de produtos com destino específico
Descrição
Endpoint responsável por realizar a cotação de frete 🚚📦.
Funciona da seguinte forma:
- Recebe uma lista de itens e o destino da entrega
- Calcula os custos e prazos de envio para os produtos informados
- Retorna as opções de frete disponíveis, permitindo ao cliente escolher a mais adequada
Parâmetros de Query
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo |
Parâmetros de Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| tradePolicyId | integer | Não | ID da política comercial |
| targetZipCode | string | Sim | CEP de destino da entrega |
| targetCountryCode | string | Sim | Código do país de destino (3 caracteres) |
| items | array | Sim | Array de itens para cotação |
| items[].productId | integer | Sim | ID do produto |
| items[].quantity | integer | Sim | Quantidade do produto |
Exemplo de Requisição
1curl --request GET \2 --url {{MAIN_URL}}/publics/products/quote \3 --data '{4 "tradePolicyId":1,5 "targetZipCode": "01001000",6 "targetCountryCode": "BRA",7 "items": [8 "productId": 1,9 "quantity": 310 ]11 }'✅ Resposta de Sucesso
1{2 "quoteGroups": [3 {4 "quoteId": "group-1-storage-1",5 "error": null,6 "tradePolicyId": 1,7 "productStorageId": 1,8 "distance": 15.5,9 "originZipCode": "04567890",10 "targetZipCode": "01310100",11 "totalPrice": 2399.80,12 "quantityItems": 2,13 "totalCubicVolume": 8000,14 "totalWeight": 1.2,15 "service": false,16 "cargoTypeCombination": [1, 2],17 "additionalTimeGroup": 2,18 "storage": {19 "id": 1,20 "name": "Armazém Central SP",21 "zipCode": "04567-890"22 },23 "items": [24 {25 "productId": 1234,26 "upsellId": null,27 "productPairOfferId": null,28 "name": "Smartphone TechBrand"29 "sku":"ABC123",30 "service": false,31 "saleWithoutStock": false,32 "quantity": 2,33 "productPriceRuleId": 0,34 "productPriceRuleName": "Original",35 "value": 1299.90,36 "code": null,37 "product": {38 "id": 1234,39 "brandId": 1234,40 "brandName": "TopPhone,41 "mainCategoryId": 1,42 "mainCategoryName": "smartphone",43 "type": "product",44 "name": "Smartphone XYZ Pro 128GB",45 "sku": "SMPH001",46 "url": "/smartphone-xyz-pro-128gb",47 "comparisonPrice":2199.99,48 "stock":20,49 "medias":[50 {51 "id": 123,52 "type": "image",53 "title": "",54 "alternativeText": null,55 "file": "\/upload\/media\/produto-media.webp",56 "originalFile": "\/upload\/media\/produto-media.png",57 "size": null,58 "originalSize": null,59 "width": null,60 "height": null,61 "url": null62 }63 ],64 "combination":[1, 2, 3],65 "currentAttributes":[66 {67 "id":123,68 "name":"cor",69 "value":{70 "id":123,71 "label":"azul-escuro",72 "image":null,73 "originalImage":null,74 "color":"#00008B",75 "order":176 }77 }78 ],79 "active": true80 },81 "productStorages": [82 {83 "productStorageId": 1234, 84 "stock": 20,85 "zipCode": "04567890",86 "latitude": "-12983571225721985",87 "longitude": "-12904872198572198",88 }89 ],90 "volume": {91 "height": 15.7,92 "width": 7.8,93 "length": 0.8,94 "weight": 0.19595 },96 "category": {97 "id": 123,98 "name": "tecnologia/smartphones"99 }100 "cargoTypeId": 1,101 "additionalTime": 1,102 "cubicVolumeItem": 0.0196,103 "totalCubicVolume": 0.0196,104 "error": null105 }106 ],107 "shippingOptions": [108 {109 "shippingTableId": 8,110 "integrationCode": "",111 "externalShippingCode": "",112 "carrierId": 0,113 "carrierName": "",114 "label": "Retirar na loja",115 "value": 0,116 "beginShippingTime": 1,117 "endShippingTime": 1,118 "trackingUrl": null,119 "row": {120 "id": 1,121 "initialZipcode": "10000000",122 "finalZipcode": "99999999",123 "initialWeight": 0,124 "finalWeight": 10,125 "initialPrice": 0,126 "finalPrice": 100000,127 "beginShippingTime": 1,128 "endShippingTime": 1,129 "shippingValue": 0,130 "variables": []131 },132 "pickups": [133 {134 "id": 1,135 "type": "inner",136 "selected": false,137 "name": "Retirada na loja TechBrand",138 "address": "TechBrand street",139 "number": "1234",140 "district": "TechBrand",141 "city": "São Paulo",142 "countryCode": "BRA",143 "stateCode": "BR-SP",144 "zipCode": "12345-123",145 "complement": "",146 "latitude": "-22109580918509215",147 "longitude": "-1023598021985029185",148 "openingHours": "9 horas am"149 }150 ],151 "error": null152 }153 ],154 "additionalTimeGroup":0,155 "storage": {156 "id": 1234,157 "code": "1",158 "corporateName": "TechBrand",159 "email": "suporte@techbrand.com.br",160 "phone": "+55123451234",161 "tradeName": "Armazém Principal",162 "stateCode": "BR-SP",163 "countryCode": "BRA",164 "document": "12345678910",165 "zipCode": "12345678",166 "city": "Birigui",167 "address": "Rua das flores 123",168 "district": "Jardim das flores 1234",169 "number": "1234",170 "complement": "Ao lado da praça",171 "latitude": "-12034598159523",172 "longitude": "-12351298578213",173 "active": true,174 "observation": null,175 "tradePolicyExceptions": [1, 2, 3]176 }177 }178 ],179 "errorItems": []180}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
⚠️ Principais erros:
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_STORE_PRODUCT_NOT_FOUND | 404 | O produto solicitado não foi encontrado. |
| UAPPI_STORE_PRODUCT_IS_INACTIVE | 403 | O solicitado está inativo. |
| UAPPI_STORE_PRODUCT_PRICE_NOT_FOUND | 404 | O preço do produto não foi encontrado. |
| UAPPI_STORE_PRODUCT_NOT_AVAILABLE_FOR_SALE | 403 | O produto não pode ser vendido pois está incompleto. |
| UAPPI_STORE_PRODUCT_IS_PARENT | 400 | O produto é um item pai com filhos e a operação não pode ser continuada. |
| UAPPI_STORE_UPSELL_NOT_FOUND | 404 | O upsell solicitado não foi encontrado. |
| UAPPI_STORE_UPSELL_QUANTITY_EXCEDEED | 400 | A quantidade de itens de upsell excedeu o limite. |
| UAPPI_STORE_PRODUCT_PAIR_OFFER_NOT_FOUND | 404 | O compre junto solicitado não foi encontrado. |
| UAPPI_STORE_PRODUCT_PAIR_MISSING_IN_CART | 400 | O compre junto requer que o item complementar também esteja no carrinho. |
| UAPPI_STORE_STOCK_INSUFFICIENT_AVAILABLE_STOCK | 400 | A quantidade de estoque solicitada não está disponível. |
| UAPPI_STORE_STOCK_BELLOW_MINIMUM | 400 | O estoque do produto solicitado está abaixo do mínimo. |
| UAPPI_INTEGRATION_SHIPPING_ZIPCODE_NOT_FOUND | 404 | O código postal solicitado não foi encontrado. |
| UAPPI_STORE_ZIPCODE_RANGE_NO_COVERAGE | 409 | Não há entrega disponível para o CEP informado. |