# Como Homologar

É possível criar a própria política de logística ao implantar uma URL de frete que será responsável pela cotação do cálculo (de frete) para os produtos integrados. Abaixo é apresentada a estrutura esperada para a cotação do frete via URL.&#x20;

Uma vez desenvolvida, a URL deverá ser encaminhada ao time de API para que sejam realizadas as devidas validações.

### Regras para a implementação

Para garantir uma boa experiência para os compradores, o serviço de frete deve responder em **até&#x20;**<mark style="color:red;">**400 ms**</mark>. Caso o serviço demore mais do que 400 ms para responder, o cálculo de frete será realizado através da <mark style="color:green;">**planilha de contingência**</mark> cadastrada pelo *seller* no portal do marketplace.

Em relação a cotação para o cliente, o marketplace Americanas irá apresentar a opção mais barata entre as disponíveis; o segundo ponto é a entrega mais rápida, seguindo as regras do *buybox*, caso haja mais de uma resposta de cotação positiva.

{% hint style="warning" %}
**Importante ressaltar que o servidor da Americanas se localiza na Virgínia.**

A localização do servidor deve ser levada em consideração para que a URL seja capaz de responder em tempo adequado.
{% endhint %}

Os dados utilizados para a homologação são fictícios, não possuindo vínculo com nenhuma conta em produção, ou seja, serão realizadas requisições com dados aleatórios de um produto de teste que não pertencerá a uma loja em produção, porém espera-se <mark style="color:green;">**sucesso**</mark> na requisição.

Caso a URL a ser validada possua regras que impeçam o sucesso ao ser informado um SKU fictício não será possível dar andamento ao processo de homologação.

{% hint style="info" %}
A homologação consiste em garantir que a URL informada esteja respondendo em tempo hábil (até **400 ms**) e que não existam impeditivos para a cotação do frete, que deverá levar em consideração especialmente as informações de **CEP** e **dimensões** apresentadas.
{% endhint %}

### POST - Teste unitário para homologação

Para validação serão realizadas requisições unitárias do método POST para a URL desenvolvida.&#x20;

{% hint style="warning" %}
Todas as requisições contarão com dados fictícios e por este motivo é imprescindível que a URL não possua bloqueios de SKU.
{% endhint %}

#### Request body:

```
{
    "destinationZip": 22041001,
    "volumes": [
        {
            "sku": "SKU_1",
            "quantity": 2,
            "price": 15.20,
            "height": 0.55,
            "length": 0.63,
            "width": 0.21,
            "weight": 1.00
        },
        {
            "sku": "SKU_2",
            "quantity": 1,
            "price": 53.99,
            "height": 0.3,
            "length": 0.2,
            "width": 0.1,
            "weight": 1.75
        }
    ]
}
```

#### Formato dos dados:

<table data-header-hidden><thead><tr><th width="174.33333333333331" align="center">Campo JSON</th><th width="152" align="center">Tipo de Dado</th><th align="center">Descrição</th></tr></thead><tbody><tr><td align="center"><strong>Campo JSON</strong></td><td align="center"><strong>Tipo de Dado</strong></td><td align="center"><strong>Descrição</strong></td></tr><tr><td align="center"><strong>destinationZip</strong></td><td align="center">inteiro</td><td align="center">CEP de destino que será passado como um inteiro.<br><em>Por exemplo: 5010010 para o CEP “05010-010″</em></td></tr><tr><td align="center"><strong>volumes</strong></td><td align="center">array</td><td align="center">Lista de itens</td></tr><tr><td align="center"><strong>sku</strong></td><td align="center">string</td><td align="center">SKU do Parceiro <strong>*</strong></td></tr><tr><td align="center"><strong>quantity</strong></td><td align="center">integer</td><td align="center">Unidades da venda</td></tr><tr><td align="center"><strong>price</strong></td><td align="center">double</td><td align="center">Preço de venda do produto</td></tr><tr><td align="center"><strong>height</strong></td><td align="center">double</td><td align="center">Altura em metros</td></tr><tr><td align="center"><strong>width</strong></td><td align="center">double</td><td align="center">Largura em metros</td></tr><tr><td align="center"><strong>length</strong></td><td align="center">double</td><td align="center">Comprimento em metros</td></tr><tr><td align="center"><strong>weight</strong></td><td align="center">double</td><td align="center">Peso em quilos (Kg)</td></tr></tbody></table>

{% hint style="info" %}
(\*) Em caso de produto variável, o SKU na requisição será o da **variação**.
{% endhint %}

#### Example request:

```
curl --location --request POST 'https://URL_PARCEIRO' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "destinationZip": 22041001,
    "volumes": [
        {
            "sku": "SKU_1",
            "quantity": 2,
            "price": 15.20,
            "height": 0.55,
            "length": 0.63,
            "width": 0.21,
            "weight": 1.00
        },
        {
            "sku": "SKU_2",
            "quantity": 1,
            "price": 53.99,
            "height": 0.3,
            "length": 0.2,
            "width": 0.1,
            "weight": 1.75
        }
    ]
}'
```

### Resposta (response) esperada

Ao executar a requisição apresentada acima, a API espera como resposta um JSON válido contendo as seguintes informações:&#x20;

#### Response esperado:

{% hint style="success" %}
200 \[Success] - OK: Deverá ser retornado um body cujo padrão pode ser visualizado a seguir:
{% endhint %}

```
{
  "shippingQuotes": [
    {
      "shippingCost": 13,
      "deliveryTime": 3,
      "shippingEstimateId": "b413bfe83d704c76bd4f81f99abf30c9",
      "shippingMethodId": "8-Correios",
      "shippingMethodName": "Sedex",
      "shippingMethodDisplayName": "Sedex"
    }
  ]
}
```

#### Formato dos dados:

<table data-header-hidden><thead><tr><th width="282.3333333333333" align="center">Campo JSON</th><th width="144" align="center">Tipo de Dado</th><th align="center">Descrição</th></tr></thead><tbody><tr><td align="center"><strong>Campo JSON</strong></td><td align="center"><strong>Tipo de Dado</strong></td><td align="center"><strong>Descrição</strong></td></tr><tr><td align="center"><strong>shippingQuotes</strong></td><td align="center">array</td><td align="center">Lista com resultados do cálculo de frete. Só será considerada a PRIMEIRA posição</td></tr><tr><td align="center"><strong>shippingCost</strong></td><td align="center">double</td><td align="center">Valor do frete</td></tr><tr><td align="center"><strong>deliveryTime</strong></td><td align="center">integer</td><td align="center">Objeto que trará as informações de prazo da entrega</td></tr><tr><td align="center"><strong>shippingEstimateId</strong></td><td align="center">string</td><td align="center">Identificador único gerado durante o cálculo do frete</td></tr><tr><td align="center"><strong>shippingMethodId</strong></td><td align="center">string</td><td align="center">ID da transportadora/tipo de frete selecionado</td></tr><tr><td align="center"><strong>shippingMethodName</strong></td><td align="center">string</td><td align="center">Nome da transportadora/tipo de frete selecionado</td></tr><tr><td align="center"><strong>shippingMethodDisplayName</strong></td><td align="center">string</td><td align="center">Nome do frete selecionado exibido para o cliente</td></tr></tbody></table>

{% hint style="danger" %}
**Todos os campos do response devem ser apresentados conforme descritos.**

Caso esteja informando em caixa alta uma letra que deve ser em caixa baixa, a requisição retornará erro.
{% endhint %}

### Exceções

Caso não haja atendimento para um determinado range de CEP, basta retornar o erro HTTP <mark style="color:red;">**404**</mark> \[not found]. Sugerimos a inclusão de uma mensagem padrão conforme exemplo abaixo:

```
{
  "message": "Região de entrega não atendida".
}
```

{% hint style="warning" %}
**Importante reforçar que caso o tempo de resposta ultrapasse o limite de&#x20;**<mark style="color:red;">**400 ms**</mark>**&#x20;haverá um retorno&#x20;**<mark style="color:red;">**499**</mark>**&#x20;\[timeout] e a&#x20;**<mark style="color:green;">**tabela de contingência**</mark>**&#x20;será acionada.**

Neste caso, é essencial que a loja possua uma tabela de contingência cadastrada e atualizada no portal da Americanas, evitando que perca vendas.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://desenvolvedores.skyhub.com.br/frete/como-homologar-frete.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
