# Sobre a API SkyHub

Conheça a API que disponibiliza recursos para potencializar o gerenciamento de vendas no marketplace Americanas

**A SkyHub é a porta de entrada para o marketplace Americanas e foi criada para solucionar os problemas de integração de forma rápida e eficiente.**

Com a nossa API você precisará se preocupar com apenas uma integração e qualquer mudança que implique em alteração para os sistemas integrados fica por nossa conta.

Integrando o seu ERP ou plataforma de e-commerce na API da Americanas, seus produtos estarão prontos pra serem vendidos no marketplace, tendo o gerenciamento de itens e pedidos em uma única plataforma.

Navegue pelas guias abaixo para informações sobre o processo de homologação, conferir os recursos tratados via API e consultar se suas dúvidas constam entre nossas perguntas frequentes:

{% content-ref url="/pages/-MFgKJVtNv-gIduf08Gt" %}
[Processo de Homologação](/processo-de-homologacao)
{% endcontent-ref %}

{% content-ref url="/pages/-MF13t1JFgbyXgb1ehjn" %}
[Recursos](/recursos)
{% endcontent-ref %}

{% content-ref url="/pages/Gk25xIfi3Bvvm4A1LbNp" %}
[Perguntas Frequentes](/perguntas-frequentes)
{% endcontent-ref %}


# Comunicados

Esta seção é direcionada para parceiros já homologados e nela disponibilizaremos os comunicados sobre alterações/adequações na API da Americanas

{% hint style="danger" %}
As informações contidas nessa seção destinam-se a parceiros que já realizaram o processo de homologação com a API.&#x20;

**Caso deseje realizar a homologação de seu sistema, consulte os** [**perfis**](/processo-de-homologacao/perfil-para-homologacao#quais-os-perfis) **disponíveis.**
{% endhint %}

Acesse os descritivos abaixo para mais detalhes sobre comunicados em destaque:

{% content-ref url="/pages/-MFXJ3y\_aFTfBm\_r9vmu" %}
[X-Accountmanager-Key](/comunicados/comunicados-2021/x-accountmanager-key)
{% endcontent-ref %}

{% content-ref url="/pages/-Melbmozy9UDVEJ-PLs6" %}
[Envio de Imagens para o Mktp B2W](/comunicados/comunicados-2021/envio-de-imagens-para-o-mktp-b2w)
{% endcontent-ref %}

{% content-ref url="/pages/-MLxCatZvRwlw0DKBCrM" %}
[Requisição Duplicada](/comunicados/comunicados-2020/requisicao-duplicada-vigente-desde-17-11-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MLiUP2bDlkuqvI66jx6" %}
[Requisição Contas Inativas](/comunicados/comunicados-2020/requisicao-contas-inativas-vigente-desde-15-11-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHvbhYxPC\_Q2mB7zIG" %}
[Consumo de Pedidos](/comunicados/comunicados-2020/consumo-de-pedidos-vigente-desde-09-03-20)
{% endcontent-ref %}

Para consultar os demais comunicados, navegue pelas subseções a seguir:

{% content-ref url="/pages/X2FpyJCz5BWcHOtGjQgI" %}
[Comunicados 2023](/comunicados/comunicados-2023)
{% endcontent-ref %}

{% content-ref url="/pages/SIg4DutpBJ5uBK97fnib" %}
[Comunicados 2022](/comunicados/comunicados-2022)
{% endcontent-ref %}

{% content-ref url="/pages/9DzWptecGkK6KbZToEvv" %}
[Comunicados 2021](/comunicados/comunicados-2021)
{% endcontent-ref %}

{% content-ref url="/pages/Ib0VfHTb7FpMdAndAPfn" %}
[Comunicados 2020](/comunicados/comunicados-2020)
{% endcontent-ref %}


# Comunicados 2025

Relação de alterações que afetaram a API e entraram em vigor no ano de 2025


# Atualização obrigatória nas integrações de frete

A omnik oferta uma interação para cotação de frete onde é  cadastrado o endpoint do parceiro e o mesmo deve receber um payload e responder com o contrato já definido.

## Importante

Viemos informar que, a partir de 20/10/2025, teremos uma mudança importante no processo de cotação de frete em nossa plataforma. **As cotações passarão a ser realizadas pela Omnik, nosso parceiro responsável pelas integrações do marketplace.**

Com essa mudança, será necessário ajustar a forma como as informações são recebidas e retornadas nas integrações para cotação de frete.

{% hint style="info" %}
Aconselhamos a criação de um novo endpoint. Caso altere o retorno no mesmo endpoint, o cálculo de frete irá deixar de funcionar imediatamente.\
Assim que finalizado, o novo endpoint deverá ser informado pelo seller para o time de suporte, via chamado.
{% endhint %}

Se houver dúvidas sobre os ajustes descritos na documentação, abra um chamado diretamente com nosso time técnico pelo e-mail <mark style="color:$danger;"><srv.mktp.api@americanas.io></mark>.&#x20;

Estamos à disposição para auxiliar em qualquer etapa da adaptação.&#x20;

**Veja como realizar os ajustes necessários**\
\
Para apoiar nesse processo, preparamos uma documentação com orientações e todos os detalhes técnicos.&#x20;

<details>

<summary>Liberar acessos aos IPs da Omnik</summary>

```
SAND (us-west-2): 34.208.201.196/32 35.84.115.152/32 44.237.254.187/32 52.42.89.220/32 54.68.50.205/32 
PROD (us-west-2): 34.208.201.196/32 35.165.35.71/32 44.231.195.225/32 44.240.171.28/32 54.149.219.155/32 
PROD (us-east-1): 3.212.27.23/32 3.228.93.46/32 34.194.89.63/32 34.231.89.224/32 52.203.145.51/32 52.5.19.10/32
```

</details>

### Request <a href="#request" id="request"></a>

```json
curl --location 'https: //seuDominio/freteSeller' \
--header 'Content-Type: application/json' \
--data '{
    "originZipCode": "string", //cep origem
    "destinationZipCode": "string", //cep destino
    "products": [ // produtos
        {
            "skuId": "string", // skuid
            "sellerTenant": "string", //tenant seller
            "category": "string", //categoria
            "weight": null, //peso
            "width": null, //largura
            "height": null, //altura
            "length": null, //comprimento
            "quantity": null, //quntidade
            "cost": null // custo/preço
        }
    ]
}
```

### Response <a href="#response" id="response"></a>

Para os campos abaixo foi mapeado nos comentários a obrigatoriedade e qual campo do antigo retorno deve  ser mapeado para um campo específico.

```json
{
    "statusHttp": 200, //sempre 200
    "status": "string", //sempre ok
    "messages": [ // opcional, informações para o integrador
        //[ { "type": "INFO", "key": "NO_DELIVERY_OPTIONS", "text": "Nenhuma opção de frete disponível para o CEP informado.", "sellerTenant": "string" } ]
        {
            "type": "string",
            "key": "string",
            "text": "string",
            "sellerTenant": "string"
        }
    ],
    "content": {
        "sellerTenant": "string", // o id seller omink
        "destinationZipCode": 1415906, //cep destino
        "platform": "string", //plataforma: mobile
        "quotationId": "string", // opcional
        "deliveryOptions": [
            {
                "deliveryMethodId": "string",//shippingMethodId
                "deliveryMethodName": "string",//shippingMethodDisplayName
                "deliveryTime": 1,//Dias para entregar transit+ expedition
                "deliveryTimeType": "bd", // bd
                "deliveryMode": "ENUM", //optional
                "deliveryEstimateBusinessDays": 1, //optional
                "finalShippingCost": 0,//shippingCost
                "deliveryEstimatedDateExact": 1,//Dias para entregar  transit+ expedition
                "deliveryEstimatedDateExactIso": "1",//Dias para entregar  transit+ expedition
                "pickupPointInfo": [ // opcional
                    {
                        "id": "string",
                        "name": "string",
                        "instructions": "string",
                        "description": "string",
                        "address": {
                            "id": "string",
                            "externalId": "string",
                            "zipCode": "string",
                            "city": {
                                "name": "string"
                            },
                            "state": {
                                "name": "string",
                                "initials": "string",
                                "ibgeCode": "string"
                            },
                            "street": "string",
                            "number": "string",
                            "complement": "string",
                            "neighborhood": "string",
                            "country": "string",
                            "latitude": null,
                            "longitude": null
                        },
                        "businessHours": [
                            {
                                "dayOfWeek": "ENUM",
                                "openingTime": "string",
                                "closingTime": "string"
                            }
                        ],
                        "businessHoursExceptions": [
                            {
                                "date": "string",
                                "startTime": "string",
                                "endTime": "string",
                                "name": "string"
                            }
                        ]
                    }
                ],
                "availableDeliveryWindows": [// opcional
                    {
                        "date": "string",
                        "startTime": "string",
                        "endTime": "string"
                    }
                ]
            }
        ],
        "products": [
            {
                "skuId": "string", //skuid
                "sellerTenant": "string", //seu proprio tenant
                "skuIntegration": "string" //opcional
            }
        ]
    },
    "time": "string", //duração de request
    "timezone": "string", //timezone
    "locale": "string" //lingua local
}
```

## Comparação

### Request

{% columns %}
{% column %}
As Is

```json
{
    "destinationZip": 5711000,
    "volumes": [
        {
            "sku": "PRD9999999999",
            "height": 0.038,
            "length": 0.082,
            "width": 0.016,
            "weight": 0.32,
            "quantity": 2,
            "price": 45.0
        }
    ]
}
```

{% endcolumn %}

{% column %}
To be

```json
{
    "originZipCode": "13555122", //cep origem
    "destinationZipCode": "5711000", //cep destino
    "products": [ // produtos
        {
            "skuId": "PRD9999999999", // skuid
            "sellerTenant": "TALD99999999999", //tenant seller
            "category": "string", //categoria opcional
            "weight": 0.32, //peso
            "width": 0.016, //largura
            "height": 0.038, //altura
            "length": 0.082, //comprimento
            "quantity": 2, //quntidade
            "cost": 50.0 // custo/preço
        }
    ]
}
```

{% endcolumn %}
{% endcolumns %}

### Response

{% columns %}
{% column %}
As Is

```json
{
    "shippingQuotes": [
        {
            "shippingMethodType": "regular",
            "shippingCost": 0.0,
            "shippingMethodId": "jadlog",
            "shippingMethodName": "standard",
            "shippingMethodDisplayName": "Normal",
            "deliveryTime": {
                "transit": 60,
                "expedition": 2
            }
        },
        {
            "shippingMethodType": "express",
            "shippingCost": 0.0,
            "shippingMethodId": "jadlog",
            "shippingMethodName": "express",
            "shippingMethodDisplayName": "Expresso",
            "deliveryTime": {
                "transit": 60,
                "expedition": 2
            }
        }
    ]
}
```

{% endcolumn %}

{% column %}
To be

```json
{
    "content": {
        "additionalInformation": null,
        "cached": false,
        "deliveryOptions": [
            {
                "deliveryEstimatedDateExact": 60,
                "deliveryEstimatedDateExactIso": "60",
                "deliveryEstimatedDateMax": 60,
                "deliveryEstimatedDateMaxIso": "60",
                "deliveryMethodId": "jadlog",
                "deliveryMethodName": "Normal",
                "deliveryTime": 60,
                "deliveryTimeType": "bd",
                "finalShippingCost": 0
            }
        ],
        "destinationZipCode": "04252040",
        "originZipCode": null,
        "identification": null,
        "platform": "mobile", //caso não tenha passe mobile
        "products": [
            {
                "sellerTenant": "TALD99999999999",
                "skuId": "PRD9999999999",
                "skuIntegration": null,
                "weight": 124.75,
                "quantity": 1,
                "cost": 1144.43,
                "height": 0.178,
                "width": 0.625,
                "length": 2.135,
                "stock": null
            }
        ]
    },
    "locale": "en",
    "messages": [],
    "status": "OK", // sempre OK
    "statusHttp": 200, // sempre 200
    "time": "13", //quanto tempo levou  para calcular
    "timezone": "America/Sao_Paulo"
}
```

{% endcolumn %}
{% endcolumns %}


# Criação e atualização de produtos e variações no Marketplace

A partir do dia 31 de Março de 2025, será necessário incluir algumas informações essenciais no JSON do produto ao enviá-lo para a SkyHub. Saiba mais neste comunicado.

Visando a eficiência, precisão e agilidade, nossa API vai passar por uma reestruturação no que diz respeito à conexão de produtos

Toda solução integrada à nossa API, seja própria ou um ERP/Plataforma, deverá se adequar a essas novas alterações.&#x20;

## Produtos

#### Quais são essas alterações?

* A estrutura mercadológica deverá ser enviada no JSON do produto;
* As categorias terão agora seus atributos, que deverão ser enviados também no JSON do produto;
* A loja deverá enviar a marca, antes consultando uma lista de marcas disponíveis;
* Os preços de produto e variação **não poderão ser 0 ou nulo;**
* Os valores ausentes nas variações na criação e atualização de produtos variáveis serão herdados do pai;
* O atributo **crossdocking** agora deverá ser enviado na raiz do produto;
* As imagens do produto pai agora serão utilizadas como consolidador das imagens das variações;
* O mapeamento de atributos deixará de existir.

{% hint style="danger" %}
**Validação de preço e preço promocional**\
\
Ao criar e atualizar um produto os campos ***promotional\_price*** e ***price***, **não podem ser 0 ou nulos**.
{% endhint %}

{% hint style="warning" %}
**Mapeamento de atributos**\
\
O mapeamento de atributos deixa-rá de existir, o que significa que os valores antes mapeados agora deverão ser enviados na raiz do produto ou da variação.  Veja os campos disponíveis para substituir seus mapeamentos na seção [Herança de atributos](#heranca-dos-valores-dos-atributos-pai-nas-variacoes)
{% endhint %}

{% hint style="warning" %}
**Herança de atributos**\
\
Os valores ausentes nas variações durante a atualização de produto serão herdados do produto no momento da execução da requisição. Veja na seção [Herança de atributos](#heranca-dos-valores-dos-atributos-pai-nas-variacoes)
{% endhint %}

{% hint style="info" %}
**Atualização do pai em produtos com variação**\
\
Devido ao novo sistema de herança, atualizar apenas o pai em um produto com variações, não resultara em modificações nos filhos, sendo necessário informar uma variação para tal. Veja mais na seção [Como será agora?](#atualizacao-do-produto-pai-reflete-nos-filhos-ao-conectar-um-produto)
{% endhint %}

### <mark style="color:red;">Como era antes?</mark>

#### Categorias:

Eram definidas automaticamente por sistemas internos levando em consideração informações do produto.

#### Atributos de categoria:

Não existiam, apenas atributos de produto (que deixam de existir).&#x20;

Os atributos de produtos antes eram enviados dentro de 'specifications' com 'key' e 'value', este formato agora será alterado.

#### **Atualização do produto pai reflete nos filhos ao conectar um produto:**

Ao atualizar apenas o produto pai em produtos com variação, os valores presentes no pai poderiam ser utilizados nos filhos no momento da atualização.

#### Marca:

Era enviada como texto livre no JSON de produtos, no atributo "brand".

### <mark style="color:green;">Como será agora?</mark>

#### Categorias:

Deverá ser enviado à SkyHub, no JSON do produto, o ID da categoria na qual o lojista deseja que seu produto seja catalogado. Esse ID deverá ser previamente consultado em uma lista de categorias disponíveis.

#### Atributos de categoria:

Existirão atributos de categoria, obrigatórios ou não, que devem ser enviados no JSON do produto. Quanto mais atributos o lojista preencher, mais informações estarão presentes na oferta no Marketplace. Os atributos estarão disponíveis para consulta previamente.

#### **Atualização do produto pai reflete nos filhos ao conectar um produto:**

Devido ao novo sistema de herança, as atualizações do pai **apenas serão aplicadas** nos filhos **no momento da interação pela API de criação/atualização de produto** se os campos em questão estiverem ausentes nos filhos. <mark style="color:red;">**Não mais no momento da conexão do produto.**</mark>

Dito isso, atualizar um produto com variação pelo [endpoint de atualização/criação](/produtos/criacao-de-produto/produto-variavel) de produtos, sem informar uma variação, não surtirá efeito.

#### Marca:

Assim como a categoria, deverá ser enviado à SkyHub, no JSON do produto, o ID da marca. Esse ID deverá ser previamente consultado em uma lista de marcas disponíveis.

## Atualização e criação com preço inválido:

São considerados preços invalidos quando ***price*** ou ***promotional\_price*** é **nulo** ou **zero**.

### <mark style="color:red;">Como era antes?</mark>

Anteriormente era possível criar um produto ou variação com preço inválido. Segue exemplo:

```json
curl --location 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "product": {
        "sku": "P2022",
        "promotional_price": 0.0,
        "price": 0.0,
        "name": "Aspirador Nasal Com Sucção Para Bebês Com Estojo 11859 Buba",
        "width": 9.0,
        "weight": 0.056,
        "length": 17.0,
        "height": 4.0,
        "description": "O Aspirador Nasal com Estojo da Buba é ideal para limpar com segurança a congestão nasal do seu bebê. "
    }
}'

```

**Response esperado:**

{% hint style="success" %}
201 \[Sucess] - Created
{% endhint %}

### <mark style="color:green;">Como será agora?</mark>

Preço inválidos retornarão um erro de validação durante a criação/atualização.

Exemplo de erro para mais de um **sku** com preço invalido:

```json
curl --location 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "product": {
        "sku": "P2022",
        "promotional_price": 0.0,
        "price": 0.0,
        "name": "Aspirador Nasal Com Sucção Para Bebês Com Estojo 11859 Buba",
        "width": 9.0,
        "weight": 0.056,
        "length": 17.0,
        "height": 4.0,
        "description": "O Aspirador Nasal com Estojo da Buba é ideal para limpar com segurança a congestão nasal do seu bebê. "
    }
}'
```

**Response esperado:**

{% hint style="danger" %}
422 \[Error] - Unprocessable Entity
{% endhint %}

```json
{
    "error": "O SKU [P2022] possue preço inválido. O preço não pode ser nulo ou igual a zero."
}
```

&#x20;Exemplo de erro para apenas um **sku** com preço invalido:

```json
curl --location 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
  "product": {
      "sku": "P2022",
      "promotional_price": 0.0,
      "price": 0.0,
      "name": "Aspirador Nasal Com Sucção Para Bebês Com Estojo 11859 Buba",
      "width": 9.0,
      "weight": 0.056,
      "length": 17.0,
      "height": 4.0,
      "description": "O Aspirador Nasal com Estojo da Buba é ideal para limpar com segurança a congestão nasal do seu bebê. ",
      "variations": [
          {
              "sku": "P2022-var"
          },
          {
              "sku": "P2022-var2"
          }
      ]
  }
}'
```

**Response esperado:**

{% hint style="danger" %}
422 \[Error] - Unprocessable Entity
{% endhint %}

```json
{
    "error": "Os seguintes SKUs possuem preços inválidos: P2022-var, P2022-var2. O preço não pode ser nulo ou igual a zero."
}
```

{% hint style="info" %}
Note que os SKUs informados são apenas das variações, pois em um produto variável os valores são herdados do pai para criar as variações, e o pai funciona como um elemento agrupador. O mesmo é verdade para a validação dos erros, onde ambas as variações não possuem **weight,** que é um atributo obrigatório, mas ainda assim um erro de validação não é retornado para o mesmo, pois o valor é herdado do **payload** do pai.
{% endhint %}

#### Atualização de produto, apenas de estoque:

Para atualizar apenas o estoque sem sofrer com a validação de preço invalido, é possível enviar apenas o payload mínimo, com "sku" e "qty" para produtos simples e "sku", "variations\[].sku" e "variations\[].qty" para produtos com variação no payload de produtos.

```json
curl --location --request PUT 'https://api.skyhub.com.br/products/{SKU DO PRODUTO}\
--header 'X-User-Email: EMAIL' \
--header 'X-Api-Key: CHAVE API' \
--header 'X-Accountmanager-Key: Api' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "product": {
        "sku": "SKU",
        "qty": 122,
        "variations": [ // Necesário apenas para produtos com variação
            {
                "sku": "SKU_VARIATIONS",
                "qty": 130
            }
        ]
    }
}'

```

#### Atualização de imagens:

Ao adicionar ou atualizar imagens nas variações de um produto, essas imagens serão automaticamente incluídas no produto pai.

```json
{
  "images": [
    "https://example.com/img0l.png",
    "https://example.con/img02.png",
    "https://example.com/img03.png",
    "https://example.con/img04.png",
    "https://example.com/img05.png",
    "https://example.com/img06.png",
    "https://example.com/img07.png",
    "https://example.com/img08.png",

  ],
  "variations": [
    {
      "sku": "var-01",
      "images": [
        "https://example.com/img0l.png",
        "https://example.con/img02.png",
        "https://example.com/img03.png"
      ]
    },
    {
      "sku": "var-02",
      "images": [
        "https://example.con/img04.png",
        "https://example.com/img05.png",
        "https://example.com/img06.png",
        "https://example.com/img07.png"
      ]
    },
    {
      "sku": "var-03",
      "images": [
        "https://example.com/img08.png"
      ]
    }
  ]
}
```

#### Herança dos valores dos atributos pai nas variações:

Agora os valores ausentes nas variações serão **herdados automaticamente** do payload do produto pai no momento da criação/atualização caso não sejam repassadas. Lembre-se que SKU, quantidade, especificações e imagens precisam ser definidas individualmente para cada variação.

```json
{
    "product": {
        "sku": "P2022",
        "name": "Identificador de cédula falsa",
        "brand": "Skyhub",
        "categoryId": "24",
        "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
        "status": "enabled",
        "price": 100.00,
        "promotional_price": 99.00,
        "cost": 0.0,
        "weight": 0.100,
        "height": 20,
        "width": 30,
        "length": 20,
        "nbm": "98769898",
        "images": [
            "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
        ],
        "specifications": [
            {
                "id": "id_do_atributo",
                "value": "Texto livre",
                "key": "atributo"
            },
            {
                "id": "id_do_atributo",
                "key": "atributo",
                "value": "Texto livre",
                "idValue": "id_da_opcao_selecionavel"
            }
        ],
        "variations": [
            {
                "sku": "F2023",
                "status": "enabled",
                "qty": 10,
                "ean": "9876543210987",
                "weight": 0.100,
                "height": 20,
                "width": 30,
                "length": 20,
                "crossdocking": "3",
                "images": [
                    "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "id": "29229",
                        "key": "atributo",
                        "value": "Texto livre",
                        "idValue": "49105"
                    }
                ]
            },
            {
                "sku": "F2024",
                "promotional_price": 89.99,
                "status": "enabled",
                "qty": 10,
                "ean": "9876543210985",
                "weight": 0.100,
                "height": 20,
                "width": 30,
                "length": 20,
                "crossdocking": "3",
                "images": [
                    "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "id": "29229", // ID referente a voltagem
                        "key": "voltagem",
                        "value": "220v",
                        "idValue": "49106"
                    }
                ]
            },
            {
                "sku": "F2025",
                "qty": 10
            }
        ]
    }
}
```

**Response esperado:**

{% hint style="success" %}
201 \[Sucess] - Created
{% endhint %}

Exemplo de produto criado com sucesso da requisição:

```json
{
    "name": "Identificador de cédula falsa",
    "nbm": null,
    "ncm": null,
    "sku": "P2022",
    "brand": "Skyhub",
    "status": "enabled",
    "ean": null,
    "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
    "product_condition": null,
    "qty": 0,
    "crossdocking": 0,
    "price": 0.0,
    "promotional_price": 0.0,
    "height": 20.0,
    "width": 30.0,
    "length": 20.0,
    "weight": 0.1,
    "cost": 0.0,
    "images": [
        "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg",
        "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
    ],
    "variation_attributes": [],
    "variations": [
        {
            "ean": "9876543210987",
            "sku": "F2023",
            "name": "Identificador de cédula falsa",
            "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
            "nbm": "98769898",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 3,
            "qty": 10,
            "price": 100.0,
            "cost": 0.0,
            "promotional_price": 99.0,
            "height": 20.0,
            "width": 30.0,
            "length": 20.0,
            "weight": 0.1,
            "images": [
                "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
            ],
            "specifications": [
                {
                    "id": "29229",
                    "key": "atributo",
                    "idValue": "49105",
                    "value": "Texto livre"
                }
            ]
        },
        {
            "ean": null,
            "sku": "F2025",
            "name": "Identificador de cédula falsa",
            "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
            "nbm": "98769898",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 0,
            "qty": 10,
            "price": 100.0,
            "cost": 0.0,
            "promotional_price": 99.0,
            "height": 20.0,
            "width": 30.0,
            "length": 20.0,
            "weight": 0.1,
            "images": [],
            "specifications": []
        },
        {
            "ean": "9876543210985",
            "sku": "F2024",
            "name": "Identificador de cédula falsa",
            "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
            "nbm": "98769898",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 3,
            "qty": 10,
            "price": 100.0,
            "cost": 0.0,
            "promotional_price": 89.99,
            "height": 20.0,
            "width": 30.0,
            "length": 20.0,
            "weight": 0.1,
            "images": [
                "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
            ],
            "specifications": [
                {
                    "id": "29229",
                    "key": "voltagem",
                    "idValue": "49106",
                    "value": "220v"
                }
            ]
        }
    ],
    "specifications": [
        {
            "id": "id_do_atributo",
            "key": "atributo",
            "idValue": "id_da_opcao_selecionavel",
            "value": "Texto livre"
        }
    ],
    "categories": [
        {
            "code": "24",
            "name": "Automação comercial"
        }
    ]
}
```

Note que na variação de sku <mark style="color:blue;">F2025</mark> houve uma herança de todos os atributos herdáveis do pai e a mesma recebeu o payload mínimo para a criação.

**Valores herdados para o filho:**&#x20;

* ean
* name
* description
* status
* crossdocking
* price
* cost
* promotional\_price
* height
* width
* length
* weight
* nbm
* nbc

**Valores&#x20;**<mark style="color:red;">**não**</mark>**&#x20;herdados para o filho:**

* qty
* img
* specifications
* sku

## Crossdocking

### <mark style="color:red;">Como era antes?</mark>

O crossdocking era enviado dentro do '**specifications**' com '*key*' e '*value*'. Dessa forma:

```json
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "specifications": [
      {
        "value": "crossdocking",
        "key": "3"
      }
    ]
  }
}'
```

### <mark style="color:green;">Como será agora?</mark>

O crossdocking deverá ser enviado na raiz da variação. Dessa forma:

```json
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "crossdocking": "3"
  }
}'
```

## Preço na variação

### <mark style="color:red;">Como era antes?</mark>

O preço e o preço promocional eram enviados dentro do '**specifications**' com '*key*' e '*value*'. Dessa forma:

```json
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
  	"specifications": [
  		{
  			"key": "price",
  			"value": "185.90"
  		},
  		{
  			"key": "promotional_price",
  			"value": "180.90"
  		}
  	]
  }
}'
```

### <mark style="color:green;">Como será agora?</mark>

O preço e o preço promocional deverão ser enviados no body da variação. Dessa forma:

<pre class="language-json"><code class="lang-json">curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
<strong>--header 'Content-Type: application/json' \
</strong>--data-raw '{
  "variation": {    
    "price": 158,
    "promotional_price": 126.4
    }
  }'
</code></pre>

## Objeto 'associations' descontinuado no GET individual de produto

### <mark style="color:red;">Como era antes?</mark>

No GET em /products/SKU\_PRODUTO, tinha a presença do array **associations**:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response antes da migração:

```
{
    "sku": "SKU do produto",
    "name": "Título",
    "description": "Descrição detalhada",
    "status": "disabled",
    "removed": false, 
    "qty": 5,
    "price": 100.0,
    "promotional_price": 80.0,
    "cost": 49.0,
    "weight": 3.0,
    "height": 1.0,
    "width": 1.0,
    "length": 1.0,
    "condition_type": null,
    "brand": "Marca",
    "ean": "1234567890123",
    "nbm": "11223344",
    "categories": [
        {
            "code": "01",
            "name": "SKYHUB"
        }
    ],
    "images": [
        "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "specifications": [
    { 
                "key": "Tamanho",
                "value": "Único"
            },
            { 
                "key": "Crossdocking",
                "value": "3"
            }
    ],
    "associations": [
        {
            "platform": "B2W",
            "status": "linked"
        }
    ]
}
```

### <mark style="color:green;">Como será agora?</mark>

Este objeto não estará mais presente no retorno:

#### Response após a migração:

```
{
  "name": "Produto Genérico",
  "nbm": null,
  "ncm": null,
  "sku": "000000",
  "brand": "Marca Genérica",
  "status": "enabled",
  "ean": "0000000000000",
  "description": "Descrição genérica do produto. Informações detalhadas sobre tamanho, uso recomendado e materiais podem ser incluídas aqui. Ideal para demonstrar o uso de campos em uma estrutura de produto.",
  "product_condition": null,
  "qty": 0,
  "crossdocking": 0,
  "price": 50.00,
  "promotional_price": 40.00,
  "height": 10.0,
  "width": 10.0,
  "length": 10.0,
  "weight": 1.0,
  "cost": 20.0,
  "images": [
    "https://example.com/image1.png",
    "https://example.com/image2.png"
  ],
  "variation_attributes": [],
  "variations": [],
  "specifications": [
    {
      "id": "20",
      "key": "Produto Internacional",
      "idValue": "59",
      "value": "Não"
    },
    {
      "id": "18",
      "key": "Condição do Item",
      "idValue": "56",
      "value": "Novo"
    }
  ],
  "categories": []
}

```

## Confira nossa documentação atualizada:

{% content-ref url="/pages/-MG4Gis5UfYeVHsMwz1j" %}
[Criação de Produto](/produtos/criacao-de-produto)
{% endcontent-ref %}

## Confira nossas seções sobre categorização e marcas:

{% content-ref url="/pages/898KJnFAWyWmBWFg9E8R" %}
[Categorização](/produtos/categorizacao)
{% endcontent-ref %}

{% content-ref url="/pages/tBFjsMyZAgV9oaM1N5qo" %}
[Consultar Marcas](/produtos/consultar-marcas)
{% endcontent-ref %}

Em caso de dúvidas, estamos à disposição através do nosso [canal de atendimento](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2024/novo-canal-de-atendimento)


# Atualizações dos pedidos no Marketplace

Toda solução integrada à nossa API, seja própria ou um ERP/Plataforma, deverá se adequar a essa alteração.

## Pedidos

O padrão de código para pedidos será alterado. Durante a migração, os padrões antigo e novo coexistirão. Veja alguns exemplos:

<mark style="color:red;">Padrão novo (Lojas Americanas-9999999999999-99)</mark>

Lojas Americanas-1517940500554-01

<mark style="color:red;">Padrão antigo</mark>

Lojas Americanas-201036063223000

## Status de pedido

O status de pedido agora terá uma lista pré definida, sendo eles:

<table><thead><tr><th width="170">Código</th><th width="276">Descrição</th><th width="338">Interação </th></tr></thead><tbody><tr><td>book_product</td><td>Pagamento Pendente</td><td>-</td></tr><tr><td>has_incident</td><td>Com Incidente (OMNIK)</td><td>-</td></tr><tr><td>payment_received</td><td>Aprovado</td><td>POST /orders/{CODIGO}/approval</td></tr><tr><td>confirm_stock</td><td>Aguardando confirmação de Estoque (OMNIK)</td><td>-</td></tr><tr><td>waiting_payment</td><td>Pagamento Pendente (waiting_payment) (OMNIK)</td><td>-</td></tr><tr><td>processing_store</td><td>Aguardando Retirada na Loja (OMNIK)</td><td>-</td></tr><tr><td>confirmed_stock</td><td>Estoque Confirmado (OMNIK)</td><td>-</td></tr><tr><td>payment_overdue</td><td>Boleto Vencido (OMNIK)</td><td>-</td></tr><tr><td>order_shipped</td><td>Pedido Enviado (OMNIK)</td><td>POST /orders/{CODIGO}/shipments</td></tr><tr><td>order_invoiced</td><td>Faturado</td><td>POST /orders/{CODIGO}/invoice</td></tr><tr><td>shipment_exception</td><td>Exceção de Entrega (OMNIK)</td><td>POST /orders/{CODIGO}/shipment_exception</td></tr><tr><td>order_canceled</td><td>Cancelado (OMNIK)</td><td>POST /orders/{CODIGO}/cancel</td></tr><tr><td>returned</td><td>Pedido com itens retornados (OMNIK)</td><td>-</td></tr><tr><td>complete</td><td>Completo (entregue) (OMNIK)</td><td>POST /orders/{CODIGO}/delivery</td></tr></tbody></table>

**Exemplos de interação**

```json
curl --location 'https://api.skyhub.com.br/orders/Lojas Americanas-1518430501155-01/invoice' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Accountmanager-Key: Api' \
--header 'X-Api-Key: {TOKEN DO SELLER}' \
--header 'X-User-Email: {EMAIL DO SELLER}' \
--data '{
    "status": "order_invoiced",
    "invoice": {
        "key": "99999999999999999999999999999999999999999999",
        "volume_qty": 1,
        "issue_date": "2025-03-20T15:50:33.782Z"
    }
}'

curl --location 'https://api.skyhub.com.br/orders/Lojas Americanas-1518430501155-01/delivery' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Accountmanager-Key: Api' \
--header 'X-Api-Key: {TOKEN DO SELLER}' \
--header 'X-User-Email: {EMAIL DO SELLER}' \
--data '{
    "status": "complete",
    "delivered_date": "13/03/2025"
}'

curl --location 'https://api.skyhub.com.br/orders/Lojas Americanas-1518430501155-01/shipments' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Accountmanager-Key: Api' \
--header 'X-Api-Key: {TOKEN DO SELLER}' \
--header 'X-User-Email: {EMAIL DO SELLER}' \
--data '{
    "status": "order_shipped",
    "shipment": {
        "code": "{code}",
        "delivered_carrier_date": "2025-03-20T15:50:33.782Z",
        "items": [
            {
                "sku": "4295312",
                "qty": 5
            }
        ],
        "track": {
            "code": "{Código de rastreio}",
            "carrier": "Correios",
            "method": "SEDEX",
            "url": "www.correios.com.br"
        }
    }
```

## Status INVOICED

### <mark style="color:red;">Como era antes?</mark>

#### Campo *volume\_qty*:

Era possível informar um *volume\_qty* para cada faturamento.

```json
{
    "status": "order_invoiced",
    "invoice": {
        "key": "99999999999999999999999999999999999999999999",
        "volume_qty": 1,
        "issue_date": "AAAA-MM-DDTHH:MM:SS-03:00"
    }
}
```

### <mark style="color:green;">Como será agora?</mark>

{% hint style="warning" %}
O campo ***volume\_qty***, será descontinuado, sendo sempre considerado como 1 por faturamento.
{% endhint %}

#### Campo *volume\_qty*:

O campo *volume\_qty*, será descontinuado, sendo sempre considerado como 1 por faturamento.

```json
curl --location --request POST 'https://api.skyhub.com.br/orders/Lojas Americanas-1000000000000/invoice' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "status": "order_invoiced",
    "invoice": {
        "key": "99999999999999999999999999999999999999999999",
        "issue_date": "2023-03-10T12:30:00-03:00"
    }
}'
```

Em caso de dúvidas, estamos à disposição através do nosso [canal de atendimento](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2024/novo-canal-de-atendimento).&#x20;


# Etiquetas Americanas Entrega

Toda solução integrada à nossa API, seja própria ou um ERP/Plataforma, deverá se adequar a essa alteração.

## Etiqueta de Frete - Direct/Correios

{% hint style="warning" %}
PLP no formato **PDF descontinuado.**
{% endhint %}

{% hint style="warning" %}
Não será possível desagrupar uma PLP.
{% endhint %}

{% hint style="info" %}
Coleta solicitada automaticamente.\
\
Não existirá a necessidade de utilizar o endpoint de confirmação de coleta para solicitar o mesmo. Sendo solicitado automaticamente a partir do faturamento do pedido.
{% endhint %}

## Funcionalidades descontinuadas

**POST - Solicitando a coleta**

Não será mais possível solicitar uma coleta pelo endpoint *confirm\_collection:*

```
https://api.skyhub.com.br/shipments/b2w/confirm_collection
```

Agora a coleta será solicitada automaticamente assim que o pedido for faturado.

**DELETE - Desagrupando PLP**

Não será possível desagrupar uma **PLP.**

```
https://api.skyhub.com.br/shipments/b2w/
```

**Desagrupar um pedido da PLP**

Não será possível desagrupar um pedido da **PLP.**

```
https://api.skyhub.com.br/shipments/b2w/{delivery_id}
```

**GET - Imprimindo PLP - PDF**

Não será possível gerar uma etiqueta no formato de **PDF**

```json
curl --location --request GET 'https://api.skyhub.com.br/shipments/b2w/view?plp_id=185500592' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/pdf' \
--header 'Content-Type: application/json'
```

Em caso de dúvidas, estamos à disposição através do nosso [canal de atendimento](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2024/novo-canal-de-atendimento).&#x20;


# Alteração na atualização de pedidos para 'SHIPPED'

Toda solução integrada à nossa API, seja própria ou um ERP/Plataforma, deverá se adequar a essa alteração.

Após o faturamento, o pedido que for entregue a transportadora deverá ter o seu status atualizado via API. Porém houve uma pequena mudança nesta atualização em que as plataformas devem se adequar.

### <mark style="color:red;">Como era antes?</mark>

Antes da migração, era possível enviar a nota fiscal junta com outras informações referente ao envio, como código de rastreio, url etc.\
\
Dessa forma:

```
POST https://api.skyhub.com.br/orders/{code}/shipments

```

```
{
  "status": "order_shipped",
  "estimated_delivery": "2025-04-01T12:30:00-03:00",
  "shipment": {
    "code": "1527300547530-01",
    "delivered_carrier_date": "2025-04-01T15:02:00.000000",
    "track": {
      "code": "BR1122334456",
      "carrier": "Correios",
      "method": "SEDEX",
      "url": "https://www.correios.com.br"
    },
    "items": [
      {
        "sku": "SNB-var-POLITICA-SELLER-001-01",
        "qty": 1
      }
    ]
  },
  "invoice": {
    "volume_qty": 1,
    "key": "51080701555554000120000003456783411311111781"
  }
}
```

### <mark style="color:green;">Como será agora?</mark>

Agora, somente dados referente ao envio do produto (não ao faturamento) deverão ser enviados no body da requisição.\
\
Dessa forma:

```
POST https://api.skyhub.com.br/orders/{code}/shipments
```

```
{
  "status": "order_shipped",
  "shipment": {
    "code": "{code}",
    "delivered_carrier_date": "AAAA-MM-DDTHH:MM:SS-03:00",
    "items": [
      {
        "sku": "{sku}",
        "qty": 1
      }
    ],
    "track": {
      "code": "{Código de rastreio}",
      "carrier": "Correios",
      "method": "SEDEX",
      "url": "www.correios.com.br"
    }
  }
}
```

Perceba que o dicionário 'invoice' foi retirado do body da requisição.

{% hint style="danger" %}
Caso o invoice permaneça no body, a requisição retornará erro **422 - TRANSIÇÃO INVÁLIDA DE STATUS**.
{% endhint %}

Saiba mais como atualizar os pedidos para o status de enviado em [**Pedidos > Atualização de Pedidos**](/pedidos/atualizacao-de-pedidos#atualizar-para-enviado-para-a-transportadora-shipped).


# Campos descontinuados no JSON de pedidos

Alguns campos foram descontinuados no processo de migração e assim não serão mais retornados no JSON de pedidos.

Alguns campos que antes estavam presentes no JSON de pedidos, após a migração foram descontinuados. Estes campos são referentes a informações de frete e de cupons.\
\
Abaixo, segue a tabela de campos descontinuados:

<br>

<table><thead><tr><th width="143.6666259765625">Tipo</th><th width="191.333251953125">Local anterior</th><th width="222">Campo descontinuado</th><th>Endpoints afetados</th></tr></thead><tbody><tr><td>Frete</td><td><p>items[]</p><p><br></p></td><td><p>"freight_take_rate_seller"</p><p><br></p></td><td>GET /queues/orders<br>/order/:code<br>/orders</td></tr><tr><td>Frete</td><td><p>items[]</p><p><br></p></td><td><p>"freight_take_rate_subsid y_percentage"</p><p><br></p></td><td>GET /queues/orders<br>/order/:code<br>/orders</td></tr><tr><td>Cupom</td><td><p>items[]</p><p><br></p></td><td>“category”</td><td>GET /queues/orders<br>/order/:code<br>/orders</td></tr><tr><td>Cupom</td><td><p>Objeto “.coupon”</p><p><br></p></td><td>“discount_value”</td><td>GET /queues/orders<br>/order/:code<br>/orders</td></tr><tr><td>Cupom</td><td><p>Objeto “.coupon”</p><p><br></p></td><td>“token”</td><td>GET /queues/orders<br>/order/:code<br>/orders</td></tr></tbody></table>

Em caso de dúvidas, estamos à disposição através do e-mail <srv.mktp.api@americanas.io>.


# Alteração na atualização de pedidos para 'CANCELED'

Esta alteração está em vigor desde Julho/2025.

Para maior consistência no gerenciamento de pedidos, **implementaremos um bloqueio para cancelamentos via Skyhub quando o status for posterior ao faturamento.**

O novo comportamento é claro:

Sellers poderão cancelar pedidos **somente até o status 'Faturado'.**

Pedidos com status **'Enviado'** ou superior que tentarem ser cancelados pela API receberão o erro: <mark style="color:red;">**'422 - O pedido não pode ser cancelado devido ao seu status atual. Para prosseguir, realize a devolução do pedido no portal.'**</mark><br>

Abaixo um exemplo de como seria o retorno de erro em um pedido no status SHIPPED:<br>

```
https://api.skyhub.com.br/orders/{code}/cancel
```

#### Request body:

```
curl --location --request POST 'https://api.skyhub.com.br/orders/Lojas Americanas-1200000000002/cancel' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "status": "order_canceled"
}'
```

#### Response esperado:&#x20;

{% hint style="danger" %} <mark style="color:red;">**422 - O pedido não pode ser cancelado devido ao seu status atual. Para prosseguir, realize a devolução do pedido no portal.**</mark>
{% endhint %}


# Última chamada para ajustes obrigatórios da API

Informamos que, a partir de 11/08/2025, todas as atualizações que não seguirem o padrão estabelecido deixarão de funcionar.

De acordo com nossa programação, será necessário adequar a documentação atual, pois os de/para anteriormente configurados no portal da Skyhub não estarão mais disponíveis. As atualizações deverão seguir rigorosamente o padrão definido nesta documentação.

### Como se adequar:

* Consultar IDs de categorias (/categories) e marcas (/brands).

[Categories](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace)

* Preencher corretamente o array specifications.

[Specifications](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace?q=specifications#como-era-antes-4)

* Garantir valores válidos de price e promotional\_price.

[Price e promotional\_price](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace#como-sera-agora)

* Enviar o campo crossdocking.

[Crossdocking](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace#crossdocking)

* Sempre enviar variações completas ao atualizá-las.

[Variations](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace)

Em caso de dúvidas, estamos à disposição através do nosso [canal de atendimento](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2024/novo-canal-de-atendimento).


# Comunicados 2024

Relação de alterações que afetaram a API e entraram em vigor no ano de 2024


# Novo canal de atendimento

O nosso e-mail para abertura de chamados referentes a nossa API mudou, fique por dentro desta atualização.

Parceiros já integrados que possuem dúvidas ou problemas técnicos relacionados a API SkyHub, ou aqueles que estão iniciando o processo de homologação, agora possuem um novo e-mail para abertura de chamados.

Pedimos que passem a utilizar somente o canal abaixo:

#### <srv.mktp.api@americanas.io>

{% hint style="danger" %}
O antigo e-mail <api@skyhub.com.br> foi extinto, assim todas as demandas devem ser redirecionados para o novo acima.
{% endhint %}

Apenas lojistas com sistema próprio que integra a nossa API, integradoras, ERPs e plataformas devem  utilizar este e-mail para a abertura de chamados, assim como parceiros em processo de homologação.\
\
Questões referentes ao Portal Marketplace nada muda, o chamado deverá ser aberto diretamente na Central de Ajuda da Americanas Marketplace.


# Remoção do array "categories" na busca de produtos

A partir do dia 29 de Janeiro de 2024, o array "categories" não será mais retornado no GET em produtos na nossa API.

A categorização dos produtos na Americanas Marketplace é realizada de forma automática por processos internos e que não levam mais em consideração a categorização na SkyHub, assim é uma informação de produto que tornou-se obsoleta.

#### <mark style="color:red;">Como era antes?</mark>

Antes no GET em produtos (*/products* ou */rehub/products*) retornávamos o array de "**categories**" com as informações que recebemos anteriormente. Vinha desta forma, por exemplo:

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FpC79XXeRuPGcio9Co81E%2Fget%20categories.jpg?alt=media&amp;token=8d176cec-f4a3-4306-b045-8f630541baef" alt=""><figcaption><p>Exemplo do array categories presente no JSON de um produto</p></figcaption></figure>

#### <mark style="color:green;">Como será agora?</mark>

O array "categories" não será mais retornado ao realizar a consulta do produto.

###

{% hint style="info" %}
A partir da data que entrar em vigor, novos produtos criados com o array "categories", essa informação será ignorada por nossa API. Também, as categorias não serão mais mostradas no front da SkyHub.\
\
Sendo assim, torna-se uma boa prática a criação de novos produtos já sem a presença do array "categories".
{% endhint %}

Em caso de dúvidas, estamos à disposição através do nosso [canal de atendimento](https://desenvolvedores.skyhub.com.br/comunicados/comunicados-2024/novo-canal-de-atendimento).&#x20;


# Novos campos no JSON de Pedidos

A partir do dia 05/02/2024, novos campos serão disponibilizados no JSON de pedidos em nossas API's.

Visando dar mais informações aos parceiros integrados, serão disponibilizadas no payload dos pedidos, dados que antes só estavam visíveis no Portal Seller. Esses campos estão divididos em 3 principais categorias, que são:

* **Promoção**
* **Subsídio de frete**
* **Cupom**

Abaixo, você pode verificar a tabela com todos os campos que serão adicionados:

{% hint style="danger" %}
Os campos referente a Frete e Cupom foram descontinuados em Março/2025.
{% endhint %}

<table><thead><tr><th width="126">Tipo</th><th width="184">Local</th><th width="133">Campo</th><th width="152">Objetivo</th><th>Endpoints afetados</th></tr></thead><tbody><tr><td>Promoção</td><td>items[].promotions[]</td><td>“value”</td><td>Informar o valor cheio da promoção aplicada no pedido</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“seller_value”</td><td>Informar o valor que o seller está pagando pela promoção aplicada no pedido</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“sponsor_value”</td><td>Informar o valor que a Americanas está pagando pela promoção aplicada no pedido</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“sponsor_percentage”</td><td>Informar o percentual que a Americanas está pagando pela promoção</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“calculation_type”</td><td>Informar o tipo do cálculo aplicado</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“name”</td><td>Informar o nome da promoção</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td>Promoção</td><td>items[].promotions[]</td><td>“category_type”</td><td>Informar a categoria da promoção Valores possíveis: CASH_DISCOUNT, CASHBACK, SCHEDULED, DISCOUNT, SUBTOTAL.</td><td>GET /queues/orders <br>/order/:code <br>/orders</td></tr><tr><td><del>Frete</del></td><td><del>items[]</del></td><td><del>"freight_take_rate_seller"</del></td><td><del>Informar o valor que o seller está pagando pelo frete</del></td><td><del>GET /queues/orders</del> <br><del>/order/:code</del> <br><del>/orders</del></td></tr><tr><td><del>Frete</del></td><td><del>items[]</del></td><td><del>"freight_take_rate_subsid y_percentage"</del></td><td><del>Informar o percentual que o seller está pagando pelo frete</del></td><td><del>GET /queues/orders</del> <br><del>/order/:code</del> <br><del>/orders</del></td></tr><tr><td><del>Cupom</del></td><td><del>Objeto “.coupon”</del></td><td><del>“category”</del></td><td><del>Informar a categoria do cupom aplicado no pedido</del></td><td><del>GET /queues/orders</del> <br><del>/order/:code</del> <br><del>/orders</del></td></tr><tr><td><del>Cupom</del></td><td><del>Objeto “.coupon”</del></td><td><del>“discount_value”</del></td><td><del>Informar o valor do desconto que o cupom aplicou no pedido</del></td><td><del>GET /queues/orders</del> <br><del>/order/:code</del> <br><del>/orders</del></td></tr><tr><td><del>Cupom</del></td><td><del>Objeto “.coupon”</del></td><td><del>“token”</del></td><td><del>Informar o nome do cupom aplicado no pedido</del></td><td><del>GET /queues/orders</del> <br><del>/order/:code</del> <br><del>/orders</del></td></tr></tbody></table>

#### Promoção - Exemplo de retorno:

> ```json
> "promotions":[
>     {
>         "calculation_type":"percentage",
>         "category_type":"CASH_DISCOUNT",
>         "name":"ACOM2028464",
>         "seller_value": 142.1,
>         "sponsor_percentage": 8.0,
>         "sponsor_value": 12.35,
>         "value": 154.45
>     }
> ]
> ```

#### <mark style="color:red;">\[DESCONTINUADO]</mark> Frete - Exemplo de retorno:

```json
"items":[
    {
        "special_price": 5.3,
        "shipping_cost": 1.99,
        "remote_store_id": null,
        "qty": 1,
        "product_id":"7891116061589",
        "original_price": 5.3,
        "name": "nameproduct",
        "listing_type_id": null,
        "id":"7891116061589",
        "gift_wrap": null,
        "detail": null,
        "delivery_line_id": null,
        "freight_take_rate_seller": 18.45,
        "freight_take_rate_subsidy_percentage": 50.0,
        "promotions":[
             {
                "calculation_type":"percentage",
                "category_type":"CASH_DISCOUNT",
                "name":"ACOM2028464",
                "seller_value": 142.1,
                "sponsor_percentage": 8.0,
                "sponsor_value": 12.35,
                "value": 154.45
            }
        ]        
```

#### <mark style="color:red;">\[DESCONTINUADO]</mark> Cupom - Exemplo de retorno:

```json
"coupon":{
    "category":"SUBTOTAL",
    "discount_value": 10.0,
    "token":"NOV010"
},
```

### Exemplo de payload completo com todos os novos campos:

```json
{
  "first_exported_at": "2017-12-17T01:07:42-02:00",
  "shipping_method_id": "123456789123",
  "updated_at": "2020-04-17T11:00:00-03:00",
  "tags": [],
  "total_ordered": 1500,
  "sync_sale_system": "Api Client",
  "shipping_carrier": "description",
  "approved_date": "",
  "shipped_date": "",
  "coupon": {
    "category": "SUBTOTAL",
    "discount_value": 10,
    "token": "NOVO10"
  },
  "billing_address": {
    "street": "Rua Tenente Cabral",
    "secondary_phone": "99 999999999",
    "region": "RJ",
    "reference": "Proximo ao terminal de onibus",
    "postcode": "20087262",
    "phone": "99 999999999",
    "number": "405",
    "neighborhood": "Centro",
    "full_name": "Nome do comprattor",
    "detail": "Detalhe",
    "country": "BR",
    "complement": "77",
    "city": "Rio de Janeiro"
  },
  "linked_order": null,
  "import_info": {
    "ss_name": "Submarino",
    "remote_id": "03-5792-01",
    "remote_code": "5792",
    "pack_id": null,
    "cart_id": null
  },
  "estimated_delivery_shift": "estimated_delivery_shift",
  "discount": 1.1,
  "items": [
    {
      "special_price": 5.3,
      "shipping_cost": 1.99,
      "remote_store_id": null,
      "qty": 1,
      "product_id": "7891116061589",
      "original_price": 5.3,
      "name": "name30",
      "listing_type_id": null,
      "id": "7891116061589",
      "gift_wrap": null,
      "detail": null,
      "delivery_line_id": null,
      "freight_take_rate_seller": 18.45,
      "freight_take_rate_subsidy_percentage": 50,
      "promotions": [
        {
          "calculation_type": "percentage",
          "category_type": "CASH_DISCOUNT",
          "name": "ACOM2028464",
          "seller_value": 142.1,
          "sponsor_percentage": 8,
          "sponsor_value": 12.35,
          "value": 154.45
        }
      ]
    }
  ],
  "shipping_estimate_id": "",
  "target_order": null,
  "expedition_limit_date": "2020-01-06T00:00:00-03:00",
  "status": {
    "type": "NEW",
    "label": "Entregue a Transportadora",
    "code": "order created"
  },
  "shipping_cost": 15.32,
  "placed_at": "2020-04-17T11:00:00-03:00",
  "shipping_method": "description",
  "shipping_address": {
    "street": "Rua Tenente Cabral",
    "secondary_phone": "99 999999999",
    "region": "RJ",
    "reference": "Proximo ao terminal de onibus",
    "postcode": "20087262",
    "phone": "99 999999999",
    "number": "405",
    "neighborhood": "Centro",
    "full_name": "Nome do comprattor",
    "detail": "Detalhe",
    "country": "BR",
    "complement": "77",
    "city": "Rio de Janeiro"
  },
  "interest": 3.54,
  "channel": "Submarino",
  "delivered_date": null,
  "delivery_contract_type": "",
  "exported_at": "2017-12-18T01:07:42-02:00",
  "imported_at": null,
  "shipments": [
    {
      "tracks": [
        {
          "url": "http://websro.correios.com.br/",
          "method": "E-sedex",
          "code": "DU037587068BR",
          "carrier": "Correios"
        }
      ],
      "items": [
        {
          "sku": "Moto GP 14 Xbox 360 Partnumber",
          "qty": 1
        }
      ],
      "delivered_carrier_date": null,
      "code": "DU037587068BR"
    }
  ],
  "sync_status": "ERROR",
  "available_to_sync": true,
  "calculation_type": "b2wentregacorreios",
  "delivery_token": {
    "takeout": null,
    "failure": null,
    "customer": null
  },
  "code": "Submarino-1157325160001-A",
  "estimated_delivery": "2020-04-17T11:00:00-03:00",
  "customer": {
    "vat_number": "78732371683",
    "phones": [
      "99 999999999"
    ],
    "name": "Nome do comprattor",
    "id_customer": "5e7b9f4acec590000d2ee884",
    "gender": "male",
    "email": "exemplo@skyhub.com.br",
    "date_of_birth": "1998-01-25"
  },
  "invoices": [
    {
      "volume_qty": 1,
      "number": "29049",
      "line": "1",
      "key": "33161207092688000126550010000290491000290493",
      "issue_date": "2016-12-18T01:07:42-02:00"
    }
  ],
  "payments": [
    {
      "value": 189.8,
      "type": null,
      "transaction_date": "2020-04-17T11:00:00-03:00",
      "status": "approved",
      "sefaz": {
        "type_integration": "1",
        "payment_indicator": "1",
        "name_payment": "Cartão de Crédito",
        "name_card_issuer": "Mastercard",
        "id_payment": "3",
        "id_card_issuer": "02"
      },
      "parcels": 5,
      "method": "CREDIT_CARD",
      "description": "No valor de: 189.8",
      "card_issuer": "MASTER",
      "autorization_id": "789"
    }
  ]
}
```

Em caso de dúvidas, estamos à disposição através do e-mail <srv.mktp.api@americanas.io>.&#x20;


# Comunicados 2023

Relação de alterações que afetaram a API e entraram em vigor no ano de 2023

{% content-ref url="/pages/UBFuDT0xDNcqnAAao0rY" %}
[Personalização de Preço Por Marca](/comunicados/comunicados-2023/personalizacao-de-preco-por-marca)
{% endcontent-ref %}

{% content-ref url="/pages/5izodWzD1V2tOdnsSLZV" %}
[Obrigatoriedade de body em métodos POST/PUT/PATCH](/comunicados/comunicados-2023/obrigatoriedade-de-body-em-metodos-post-put-patch)
{% endcontent-ref %}


# Personalização de Preço Por Marca

Comunicado encaminhado pelo marketplace sobre alteração no envio de preço por marca

{% hint style="warning" %}
No dia 09/03/2023 o envio de preço para as marcas Americanas, Shoptime e Submarino foi **unificado**.
{% endhint %}

Visando uma melhor experiência para o *seller* e simplificação de sua operação, os preços serão unificados, isto é, cada produto terá um preço único para venda nos sites que constituem o marketplace Americanas (sendo eles Americanas, Shoptime e Submarino).

#### <mark style="color:red;">O que muda?</mark>

Anteriormente, além dos campos padronizados para envio de preço (**price** e **promotional\_price**), era possível criar através da plataforma/ERP e encaminhar para a API atributos para a distinção de preço por marca. Assim, após o mapeamento de tais atributos no front da API, as marcas que constituem o marketplace Americanas (Americanas, Shoptime e Submarino) recebiam valores distintos para a venda de um mesmo produto.

Esta ação impactava diretamente na atualização de preços, uma vez que após definidos os valores por marca, a cada atualização, fazia-se necessário que o *seller* alterasse individualmente os atributos criados em sua plataforma/ERP com a finalidade de distinção de preço por site do marketplace.

#### <mark style="color:green;">O que</mark> <mark style="color:green;background-color:yellow;">não</mark> <mark style="color:green;">muda?</mark>&#x20;

Para o serviço **Americanas Empresas** não haverá alteração, ou seja, através da plataforma/ERP ainda será possível criar atributos responsáveis pela inclusão de preços distintos que serão refletidos para vendas para clientes CNPJ.

{% hint style="info" %}
A solicitação do serviço Americanas Empresas é realizada exclusivamente pelo próprio *seller* através do portal parceiro, porém abaixo temos uma breve orientação quanto a inclusão do preço personalizado para tal serviço.
{% endhint %}

Uma vez que a loja deseja atuar com vendas para CNPJ's (serviço Americanas Empresas) é possível incluir na estrutura do produto atributos que irão conter preços a serem utilizados para este serviço.

Como se tratam de atributos comuns a serem enviados via API, não há uma padronização para a *key* a ser utilizada, porém a mesma deve ser de fácil compreensão.&#x20;

No exemplo a seguir temos a criação de um produto contendo os atributos **price\_empresas** e **promo\_price\_empresas** dentro do *array **specifications*** e estes receberão os preços a serem considerados pelo serviço Americanas Empresas:

{% hint style="warning" %}
Para consultar todos os detalhes sobre a criação de um produto via API, acesse a página [Criação de Produto](/produtos/criacao-de-produto) desta documentação.
{% endhint %}

```
curl --location 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "product": { 
        "sku": "2023001",
        "name": "Camiseta Branca Tam. Único",
        "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta regata feminina, disponível na cor branca e tamanho único.",
        "status": "enabled", 
        "qty": 1,
        "price": 39.90,
        "promotional_price": 35.90,
        "cost": 19.89,
        "weight": 0.1,
        "height": 25,
        "width": 1,
        "length": 30,
        "brand": "SkyHub",
        "ean": "1234567890123", 
        "nbm": "11223344",
        "categories": [],
        "images": [
            "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
        ],
        "specifications": [
            { 
                "key": "Tamanho",
                "value": "Único"
            },
            { 
                "key": "Crossdocking",
                "value": "3"
            },
            { 
                "key": "price_empresas",
                "value": "29.90"
            },
            { 
                "key": "promo_price_empresas",
                "value": "25.90"
            }
        ]
    }
}'
```

Após a criação do produto contendo os atributos de preço que deverão ser utilizados pelo serviço Americanas Empresas (**price\_empresas** e **promo\_price\_empresas**) é necessário realizar o mapeamento destes campos para que o marketplace possa refleti-los corretamente.&#x20;

O mapeamento é realizado diretamente no front da API através do menu Plataformas > Atributos \[B2W] > Mapear:

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FFJdvzUIfZj6RTAuh17D0%2F2023-03-03_18h07_52.png?alt=media&amp;token=30b1e29d-60ac-4725-b0b4-a3993dc53fb0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FHZudhKAHZutiIbeKaMN1%2F2023-03-03_18h11_22.png?alt=media&amp;token=739296af-3a4d-4c56-9f2d-cc9345d23ee8" alt=""><figcaption><p>Normalmente ao final da página de mapeamento de campos para o marketplace vemos os campos "B2w Empresas Preço De" e "B2w Empresas Preço Por", utilizados para a definição dos atributos que deverão ser considerados para a precificação de itens para o serviço Americanas Empresas</p></figcaption></figure>

Ao visualizar na página de mapeamento os campos destinados aos preços que serão enviados para o serviço Americanas Empresas, basta selecionar os atributos criados através da plataforma/ERP:&#x20;

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FAUG0ZGLzv0RiSkChna9K%2F2023-03-03_18h19_59.png?alt=media&amp;token=65c8faeb-042c-450b-a5cf-56a44cdb31fd" alt=""><figcaption></figcaption></figure>


# Obrigatoriedade de body em métodos POST/PUT/PATCH

A partir de 30 de Outubro/2023, requisições utilizando esses métodos precisarão da presença do body

Visando a melhora de performance, a segurança e a confiabilidade, alguns serviços de nossa API foram migrados para novos servidores. Com isso, algumas alterações deverão ser implementadas pelos nossos parceiros.

#### <mark style="color:red;">Como era antes?</mark>

Anteriormente, aceitávamos requisições com os métodos POST/PUT/PATCH sem a presença de um body, pois em algumas ocasiões essa informação não era relevante para a requisição.

#### <mark style="color:green;">Como será agora?</mark>

Agora, toda e qualquer requisição que utilizar os métodos POST/PUT/PATCH, deverão ter a presença do body, mesmo que seja vazio.

**Exemplificaremos abaixo uma atualização de pedido para entregue:**

```
curl --location --request POST  "https://api.skyhub.com.br/orders/Lojas%20Americanas-2010xxxxxxx4001/delivery" \
  --header "x-user-email: emailcadastrado@exemplo.com" \
  --header "x-api-key: qxxxxxxxxxxxxxxxxxF-" \
  --header "accept: application/json" \
  --header "content-type: appliation/json" \
  --data-raw ''
```

{% hint style="info" %}
O "--data-raw" é como o CURL passa o parâmetro body na requisição, podendo ser também "-d" que funcionará da mesma forma.
{% endhint %}

#### O que ocorrerá se a requisição foi realizada sem a presença do body?

{% hint style="danger" %}
Uma mensagem de erro informando **Bad Request** será retornada e assim o pedido não terá o status atualizado.
{% endhint %}

\
\
Em caso de dúvidas, estamos à disposição através do e-mail <mark style="color:blue;"><api@skyhub.com.br></mark>.&#x20;


# Comunicados 2022

Relação de alterações que afetaram a API e entraram em vigor no ano de 2022

{% content-ref url="/pages/H6HpMVgZv9DYyM26xcup" %}
[Inativação do endpoint /categories](/comunicados/comunicados-2022/inativacao-do-endpoint-categories)
{% endcontent-ref %}

{% content-ref url="/pages/UYO4Zh7f2Ez9bDCQk7Ld" %}
[MultiCD: Substituição do store\_status pelo statuses](/comunicados/comunicados-2022/multicd-substituicao-do-store_status-pelo-statuses)
{% endcontent-ref %}

{% content-ref url="/pages/y95QRk0ZsGO2A8jloQ2g" %}
[Bloqueio de requisições com x-account inválido - Prazo não definido](/comunicados/comunicados-2022/bloqueio-de-requisicoes-com-x-account-invalido-prazo-nao-definido)
{% endcontent-ref %}

{% content-ref url="/pages/Vw9GeJA9HUtT4L6i17Pp" %}
[Mudança na atualização da chave da nota fiscal](/comunicados/comunicados-2022/mudanca-na-atualizacao-da-chave-da-nota-fiscal)
{% endcontent-ref %}


# Inativação do endpoint /categories

Comunicado que visa informar sobre as consultas realizadas no endpoint /categories

{% hint style="danger" %}
No dia 17/10/2022 o endpoint `/categories` foi **descontinuado**.
{% endhint %}

A fim de melhorarmos a performance de nossa API, optou-se por descontinuar o endpoint **/categories**, pois a inclusão de categorias caiu em desuso após a automatização deste processo através da conexão do item com o marketplace:

{% hint style="info" %}
O marketplace Americanas possui um categorizador automático chamado Minos que atua da seguinte maneira: Após a conexão do item, o sistema analisa o título e sua descrição, identifica a similaridade entre as categorias existentes e realiza a classificação que será refletida para os sites de venda.&#x20;
{% endhint %}

Uma vez que a categorização ocorre diretamente pelo marketplace, as categorias na API não possuem relação com a estrutura do produto nos sites.

Devido a inativação, a partir do dia 17/10/2022, todas as tentativas de consultar o endpoint ***/categories*** passaram a retornar status <mark style="color:red;">**404**</mark>.

Ainda será possível realizar a criação de categorias diretamente na estrutura do produto através do [*array categories*](/produtos/criacao-de-produto), possibilitando a inclusão de filtros para buscas de produtos e aplicação de regras automáticas no front da API, porém a inclusão destas (categorias) não é obrigatória e o não envio do campo para a API não impactará na conexão do item com o marketplace.&#x20;

{% hint style="danger" %}
As categorias adicionadas não serão visualizadas ao realizar um GET no `/products`.&#x20;
{% endhint %}

Em caso de dúvidas, estamos à disposição através do e-mail <mark style="color:blue;"><api@skyhub.com.br></mark>.&#x20;


# MultiCD: Substituição do store\_status pelo statuses

Comunicado que contempla a substituição do store\_status pelo statuses na atualização da estrutura completa da warehouse (CD)

Foram revisadas as requisições que constituem o recurso de MultiCD e viu-se a necessidade de alterar o campo responsável pela **atualização** do status da warehouse.

**O que muda?**

Anteriormente, para **atualizar a estrutura completa** de uma warehouse (CD) era necessário referir o campo **store\_status**, como no exemplo a seguir:

```
"store_status": [{"platform": "B2W","status": "inactive","remote_code": "775"}]
```

Após revisão de nosso endpoint atribuído ao MultiCD, o campo **store\_status** foi excluído e em seu lugar adicionamos o **statuses**:

```
"statuses":[{"platform": "B2W","remote_code": "775", "status": "active"}]
```

{% hint style="danger" %}
É necessário realizar as devidas adequações até o dia **15/08/2022**.&#x20;

Após a data definida, todas as requisições encaminhadas para a API visando alterar a estrutura completa de uma warehouse (CD) devem conter o campo **statuses**, ao invés do **store\_status**.
{% endhint %}


# Bloqueio de requisições com x-account inválido - Prazo não definido

Comunicado referente ao bloqueio de requisições contendo x-accountmanager-key desconhecido/não homologado

No início do processo de homologação com a API da Americanas cada sistema recebe um identificador (***x-accountmanager-key***) que deve ser incorporado a todas as requisições enviadas para a SkyHub.

{% hint style="danger" %}
O identificador ***x-accountmanager-key*** é a assinatura única do sistema e o principal responsável por permitir a validação e integridade dos dados recebidos na API.
{% endhint %}

Foi iniciada uma ação para que as requisições recebidas na API da Americanas sem o ***x-accountmanager-key*** sejam recusadas/bloqueadas. O mesmo vale para as requisições realizadas através de um identificador não homologado, isto é, um ***x-accountmanager-key*** cujo sistema não finalizou o processo de homologação.

{% hint style="info" %}
O prazo para o bloqueio das requisições ainda não foi definido, porém é imprescindível a validação do *x-accountmanager-key* enviado para a API e/ou finalização de seu processo de homologação.
{% endhint %}


# Mudança na atualização da chave da nota fiscal

Informamos que a partir do dia 24/01/2022, haverá uma mudança referente a atualização da chave da nota fiscal na SkyHub. A partir desta data a SkyHub ao receber uma notificação de pedido do Americanas Marketplace (Lojas Americanas, Shoptime, Submarino) irá comparar as chaves da nota fiscal do pedido.\
\
**Qual o impacto dessa mudança?**\
\
Caso haja divergência entre a chave da nota fiscal contida na SkyHub e a chave da nota fiscal que foi utilizada no marketplace, a SkyHub passará a atualizar a chave da nota fiscal com a informação que recebemos do marketplace. Exemplos de pedidos que serão impactados pela mudança:

\
**- Pedidos que estão com as chaves das notas fiscais divergentes na SkyHub e no Americanas Marketplace:** \
nesse caso a SkyHub irá atualizar o pedido com a chave da nota fiscal de acordo com a informação contida no marketplace.\
\
**- Pedidos que foram faturados manualmente no marketplace:** atualmente esses pedidos não exibem a chave da nota fiscal na SkyHub, após essa mudança a SkyHub passará a atualizar o pedido com a chave da nota fiscal e disponibilizá-lo para consumo com essa informação.\
\
**- Pedidos faturados pelo faturador do Fulfillment:** atualmente a SkyHub não exibe a chave da nota fiscal desses pedidos e passaremos a disponibilizá-los para consumo com a chave da nota de venda.\
\
Os pedidos que possuem a mesma chave da nota fiscal, tanto na SkyHub quanto no marketplace ou que não se enquadram em um dos cenários acima, não serão impactados pela mudança.\
\
Em caso de dúvidas, seguimos à disposição através do e-mail **<api@skyhub.com.br>**.


# Comunicados 2021

Relação de alterações que afetaram a API e entraram em vigor no ano de 2021

{% content-ref url="/pages/jwiFaLxgezhAvoaZPHgj" %}
[Código de homologação da Anatel](/comunicados/comunicados-2021/codigo-de-homologacao-da-anatel)
{% endcontent-ref %}

{% content-ref url="/pages/-MhZrqC8EXAHybyrp7J4" %}
[Atributo Garantia](/comunicados/comunicados-2021/atributo-garantia-prazo-limite-06-09-21)
{% endcontent-ref %}

{% content-ref url="/pages/-Melbmozy9UDVEJ-PLs6" %}
[Envio de Imagens para o Mktp B2W](/comunicados/comunicados-2021/envio-de-imagens-para-o-mktp-b2w)
{% endcontent-ref %}

{% content-ref url="/pages/-MeRsRUSIzyz5PdcJd5\_" %}
[Mudança response HTTP /delivery](/comunicados/comunicados-2021/mudanca-response-http-delivery-prazo-limite-26-07-21)
{% endcontent-ref %}

{% content-ref url="/pages/-MZnzf2lkB3IhQwIqHm6" %}
[Mudança Faturamento Pedidos B2W Entrega Direct](/comunicados/comunicados-2021/mudanca-faturamento-pedidos-b2w-entrega-direct-prazo-limite-23-08-21)
{% endcontent-ref %}

{% content-ref url="/pages/-Mbc4bhSDvHXg0mrqIAi" %}
[Limite de Categorias na SkyHub](/comunicados/comunicados-2021/limite-de-categorias-na-skyhub-vigente-desde-21-06-21)
{% endcontent-ref %}

{% content-ref url="/pages/-Mb3SzatNplcxofZFE6c" %}
[Limite de Imagens na SkyHub](/comunicados/comunicados-2021/limite-de-imagens-na-skyhub-vigente-desde-21-06-21)
{% endcontent-ref %}

{% content-ref url="/pages/-MX2P9941iqipJ\_6WGY\_" %}
[Mudança response HTTP /invoice e /shipments](/comunicados/comunicados-2021/mudanca-response-http-invoice-e-shipments-vigente-desde-03-05-21)
{% endcontent-ref %}

{% content-ref url="/pages/-MQTYscLU-kO28PCu3Nj" %}
[Mudança Infraestrutura SkyHub](/comunicados/comunicados-2021/mudanca-infraestrutura-skyhub-vigente-desde-05-02-21)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHd47LjzxQ1UWMYo67" %}
[Protocolo HTTP/HTTPS](/comunicados/comunicados-2021/protocolos-http-https-vigente-desde-11-01-21)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHpnwdBNa\_3qcHRjjD" %}
[Consumo de Pedidos | Preço](/comunicados/comunicados-2021/consumo-de-pedidos-or-preco)
{% endcontent-ref %}

{% content-ref url="/pages/-MFXJ3y\_aFTfBm\_r9vmu" %}
[X-Accountmanager-Key](/comunicados/comunicados-2021/x-accountmanager-key)
{% endcontent-ref %}


# Código de homologação da Anatel

Comunicado referente ao envio do código de homologação da Anatel à SkyHub

Todos os lojistas que comercializam produtos que necessitam de homologação da Agência Nacional de Telecomunicações (Anatel) precisam também **informar o código de homologação** às suas plataformas online de venda.

O código de homologação confirma que o produto possui certificação e atende os padrões técnicos de segurança e qualidade para ser vendido ao usuário final.

**Veja abaixo as regras para enviar este código à SkyHub:**

1- Enviar o código da homologação para Skyhub como um atributo na ficha técnica do item, ou seja, dentro de *"specifications"*.

2- Este atributo deve ter especificamente o nome “Anatel”.

{% hint style="danger" %}
**Atenção:** os atributos são case-sensitive, o atributo deve ser enviado exatamente como informado acima.
{% endhint %}

Reforçamos que não é necessário fazer nenhum desenvolvimento em sua plataforma ou sistema, apenas criar o atributo “Anatel” na ficha técnica do item e enviar à SkyHub com o seu respectivo código.

**Importante:** caso os produtos não estejam atualizados com o código de homologação eles serão retidos na SkyHub ao conectar o item e você verá a seguinte mensagem:

> *“Anúncio não possui informação do Código de Homologação (Anatel), adeque o cadastro do produto para solicitar a reativação”*

A validação do atributo será realizada pelo marketplace, caso ocorra algum erro na validação da informação enviada no atributo o erro estará disponível no endpoint [**`/sync_errors`**](https://desenvolvedores.skyhub.com.br/recursos/erros#sync_errors) **.**


# Atributo Garantia

Comunicado referente a estrutura do atributo Garantia que deverá ser preenchida de maneira padronizada conforme regra do Marketplace

Em produtos que utilizam o atributo **Garantia**, ele deve ser informado **somente com dados numéricos,** essa informação referencia a garantia do produto **em meses**, ou seja, se o produto possuí 3 meses de garantia o valor a ser enviado para o atributo será `3`.&#x20;

Além disso, quando for enviar a informação de garantia, ela deve ser enviada dentro do array `specifications`, segue exemplo de atributo Garantia para criação de produto abaixo. \
Para atualizar essa informação caso necessário, seguiria o mesmo princípio porém com método `PUT`, e no caso de variação estaria na estrutura de `variation`:

```
curl --location --request POST 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: XXXXX' \
--header 'x-Api-Key: XXXXX' \
--header 'x-accountmanager-key: XXXXX' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
	"product":
    .
    .
    .,
    "specifications": [
      {
        "key": "Garantia",
        "value": "3"
      }
    ]
  }
}'
```

{% hint style="warning" %}
Verifique se envia o atributo conforme descrevemos acima; Lembrando que estamos pontuando o conteúdo em "value" que precisa ser ajustado para conter apenas números.
{% endhint %}


# Envio de Imagens para o Mktp B2W

Objetivo desta comunicação é para pontuar como funcionará a atualização de imagens para o Marketplace B2W

O envio de imagens para o **Marketplace B2W** seguem algumas premissas que são:

```
Dimensões mínimas: 400 x 400 pixels;
Dimensões máximas: 1000 x 1000 pixels;
Formato: jpg;
Enviar a URL de imagem em protocolo HTTPS.
```

Terá uma nova mudança que a partir da data de virada deste comunicado não será possível reutilizar URLs de imagens, ou seja, caso precise atualizar/alterar a imagem de um produto precisará enviar em uma nova URL, somente assim refletirá a nova imagem no anúncio do Marketplace B2W.

{% hint style="danger" %}
Caso não envie uma nova URL para a imagem não será alterada no Marketplace B2W.
{% endhint %}

{% hint style="warning" %}
Importante verificar se já existe esse tratamento para imagens, caso não seja feito passar a tratar.
{% endhint %}


# Mudança response HTTP /delivery

Comunicado referente a alteração do response HTTP para o endpoint /deliveryda API SkyHub

Informamos que alteraremos o response **HTTP** da requisição para o endpoint:

```
https://api.skyhub.com.br/orders/{code}/delivery
```

&#x20;O response que recebem é **HTTP 201**, passaremos a disponibilizar o **HTTP 204** como resposta, que é o mais aderente para a requisição feita.

{% hint style="warning" %}

* Verifique se existe alguma ação na qual envia a mesma requisição para a SkyHub, ajuste para que não faça requisições com a mesma informação. Envie uma nova requisição somente se existir informação diferente para o pedido;
* Outro ponto a analisar se existe alguma ação em sua integração com a SkyHub que está vinculada exclusivamente aguardando este response HTTP 201, caso esteja realize a mudança para HTTP 204, assim manterá a integração consistente.
  {% endhint %}


# Mudança Faturamento Pedidos B2W Entrega Direct

Comunicado referente a mudança do faturamento para pedidos do método de envio B2W Entrega Direct

Anteriormente os sellers que integram com a SkyHub através do método de envio **B2W Entrega Direct**, faziam o envio da Chave da NFe e informavam quantas etiquetas seriam necessárias para envio do pedido no momento do Faturamento.

A **integração do** **Faturamento** para pedidos **B2W Entrega Direct mudou desde 23/08/2021** conforme notificações feitas, e precisamos receber o XML da NFe, com isso é necessário que fizessem a mudança do faturamento desses pedidos seguindo as orientações da documentação abaixo onde VALIDAMOS com quem nos acionou sobre todo o processo que foi feito.

**O portal Americanas Marketplace precisará receber obrigatoriamente o XML. Caso não seja enviado, você irá receber erro ao tentar imprimir a etiqueta.**

Atente-se ao envio do XML By Direct, para que sua operação não seja impactada.&#x20;

{% content-ref url="/pages/-MW\_ugcUvsPRj1ZEzVq5" %}
[Faturamento Pedido - Americanas Entrega Direct](/pedidos/faturamento-pedido-americanas-entrega-direct)
{% endcontent-ref %}

{% hint style="warning" %}
**IMPORTANTE**: É obrigatório a homologação do faturamento via API, caso não tenha feito é necessário que o cliente efetue MANUALMENTE até que esteja apto a operar por este fluxo.
{% endhint %}

{% hint style="danger" %}
Importante lembrar que outras modalidades como B2W Entrega Correios e B2W Fulfillment não sofrem com essas mudanças.
{% endhint %}


# Limite de Categorias na SkyHub

Comunicado referente a mudança do limite de categorias na SkyHub

A forma de envio de categorias para SkyHub não possuía um limitador, entendemos que isso acaba gerando um possível problema de performance de acordo com a quantidade de categorias que o produto possuí, sendo assim adotamos um limitador para recebimento de categorias.

Passaremos a aceitar no **máximo 10 categorias por produto**, como a categoria está atrelada a estrutura do produto isso refletirá tanto na estrutura de produto simples, quanto de produto variável, pois temos somente um array de categoria para o produto.

Caso supere a quantidade de 10 categorias iremos considerar somente as 10 primeiras que recebermos.

Adicionamos essa informação em nossas Boas Práticas, importante sempre estar atento a essas informações:

{% content-ref url="/pages/-LMEVyhTwLlMXiA11Zek" %}
[Melhores práticas](/guias-api-skyhub/melhores-praticas)
{% endcontent-ref %}

{% hint style="danger" %}
**ATENÇÃO:** É necessário que faça a atualização dos produtos que existem hoje na SkyHub que possuem mais que 10 categorias, caso não seja feita a atualização no dia **21/06/21** executaremos um procedimento no qual ficará disponível somente as 10 primeiras categorias do produto.
{% endhint %}

{% hint style="warning" %}
Importante verificar se existe esse tipo de limitador na integração com a SkyHub, caso não exista crie para evitar possíveis problemas de replicação de categorias.
{% endhint %}


# Limite de Imagens na SkyHub

Comunicado referente a mudança do limite de imagens na SkyHub

A forma de envio de imagens na SkyHub não possuía um limitador, entendemos que isso acaba gerando um possível problema de performance de acordo com a quantidade de imagens que o produto possuí, sendo assim adotamos um limitador para recebimento de imagens.

Passaremos a aceitar no **máximo 20 imagens por SKU**, referente tanto a produto simples quanto produto variável, ou seja, posso ter 20 imagens no meu produto simples ou 20 imagens por variação dos meus produtos.

Caso supere a quantidade de 20 imagens iremos considerar somente as 20 primeiras que recebermos.

Adicionamos essa informação em nossas Boas Práticas, importante sempre estar atento a essas informações:

{% content-ref url="/pages/-LMEVyhTwLlMXiA11Zek" %}
[Melhores práticas](/guias-api-skyhub/melhores-praticas)
{% endcontent-ref %}

{% hint style="danger" %}
**ATENÇÃO:** É necessário que faça a atualização dos produtos que existem hoje na SkyHub que possuem mais do que 20 imagens, caso não seja feita a atualização no dia **21/06/21** executaremos um procedimento no qual ficará disponível somente as 20 primeiras imagens do produto.
{% endhint %}

{% hint style="warning" %}
Importante verificar se existe esse tipo de limitador na integração com a SkyHub, caso não exista crie para evitar possíveis problemas de replicação de imagens.
{% endhint %}


# Mudança response HTTP /invoice e /shipments

Comunicado referente a alteração do response HTTP para os endpoints /invoice e /shipments da API SkyHub

&#x20;Informamos que alteraremos o response **HTTP** das requisições para os seguintes endpoints:

```
https://api.skyhub.com.br/orders/{code}/invoice
https://api.skyhub.com.br/orders/{code}/shipments
```

&#x20;O response que recebem é **HTTP 201**, passaremos a disponibilizar o **HTTP 204** como resposta, que é o mais aderente para a requisição feita.

{% hint style="warning" %}
É importante verificar se existe alguma ação em sua integração com a SkyHub que está vinculada exclusivamente aguardando este response HTTP 201, caso esteja realize a mudança para HTTP 204, assim manterá a integração consistente.
{% endhint %}


# Mudança Infraestrutura SkyHub

Comunicado referente a alteração da localização dos servidores da API SkyHub

Hoje nossos servidores estão alocados em São Paulo, estamos programados para mudar nossa infraestrutura para os servidores da Virginia em 05/02/21.

Quais são os possíveis impactos durante essa migração?

1 - Durante a migração que iniciará em 05/02/21 às 22h temos a previsão de tempo de indisponibilidade de nossa API durante algumas horas ou até mesmo a madrugada inteira;

2 - Após a migração nossas aplicações terão um acréscimo de **200ms** no tempo de resposta por conta da latência de rede, isso se aplicará para os servidores que não estão alocados na Virginia;

3 - Nossa API não responderá no período de migração, sendo assim será necessário realizar novamente as requisições que retornaram erro.

{% hint style="warning" %}
É importante ter ciência dessa mudança e programar sua aplicação para que faça as re-tentativas de envio de informação para que mantenha os dados com a SkyHub fidedignos.
{% endhint %}


# Protocolo HTTP/HTTPS

Comunicado referente a alteração dos protocolos dos endpoints da API SkyHub

Caso realize requisições com o protocolo **HTTP** na **Skyhub**, saiba que à partir de agora todas as requisições precisarão ser feitas em **HTTPS.**

{% hint style="warning" %}
É importante a alteração, pois, podem existir impedimentos na tratativa das respostas das requisições.
{% endhint %}


# Consumo de Pedidos | Preço

Esse comunicado tem como objetivo auxiliar a identificar caso a utilização da informação de preço esteja sendo utilizada de forma errada

**Como os preços são disponibilizados ao consumir pedidos?**\
Os preços são disponibilizados nos campos “**original\_price**” e “**special\_price**”, no qual eles possuem os seguintes contextos:

* **original\_price**, preço de venda do produto no marketplace;
* **special\_price**, preço de venda com a subtração do desconto(**discount**)

Então o objetivo do **special\_price** é retornar o preço do produto com o desconto aplicado, ficando o seguinte cálculo: **original\_price – discount = special\_price**.\
\
Caso esteja aplicando os valores de forma diferente do explicado acima é necessário que realize a adequação em seu sistema.

{% hint style="warning" %}
Importante que seja verificado como o preço está sendo utilizado para que não tenha problemas com relação aos valores!
{% endhint %}


# X-Accountmanager-Key

Este comunicado possuí o objetivo de indicar que o X-Accountmanager-Key passa a ser obrigatório nos Headers para requisições na API SkyHub

Informamos que o **X-Accountmanager-Key** será um parâmetro obrigatório do Header, para requisições feitas na API Skyhub.\
\
Uma vez que o **X-Accountmanager-Key** não for informado a requisição feita retornará o erro `HTTP 401`, ou seja, falta de parâmetro para requisição.\
\
Lembrando que o **X-Accountmanager-Key** é o parâmetro identificador da integração. A informação foi disponibilizada junto com os dados da conta teste no início do processo de homologação.

{% hint style="info" %}
Prazo para ajuste não está definido, o ideal é que iniciem a adequação, pois requisições feitas sem **X-Accountmanager-Key** retornará erro.
{% endhint %}

{% hint style="warning" %}
É importante a alteração, pois, pode retornar erro as requisições feitas para a API SkyHub.
{% endhint %}


# Comunicados 2020

Relação de alterações que afetaram a API e entraram em vigor no ano de 2020

{% content-ref url="/pages/-MLxCatZvRwlw0DKBCrM" %}
[Requisição Duplicada](/comunicados/comunicados-2020/requisicao-duplicada-vigente-desde-17-11-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MLiUP2bDlkuqvI66jx6" %}
[Requisição Contas Inativas](/comunicados/comunicados-2020/requisicao-contas-inativas-vigente-desde-15-11-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFkKRtV6l02PFKxQ17L" %}
[Entrega Agendada by Direct](/comunicados/comunicados-2020/entrega-agendada-by-direct-vigente-desde-28-08-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHxjwuSNHz2Xw7\_JWc" %}
[Headers para Requisições](/comunicados/comunicados-2020/headers-para-requisicoes-vigente-desde-09-06-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHvbhYxPC\_Q2mB7zIG" %}
[Consumo de Pedidos](/comunicados/comunicados-2020/consumo-de-pedidos-vigente-desde-09-03-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHhIU6rR7gCVaIrtTk" %}
[Atributo Data Faturamento](/comunicados/comunicados-2020/atributo-data-faturamento-vigente-desde-20-02-20)
{% endcontent-ref %}

{% content-ref url="/pages/-MFHnHkl7UTrAjZnkLZS" %}
[Atributo Data Enviado](/comunicados/comunicados-2020/atributo-data-enviado-vigente-desde-20-02-20)
{% endcontent-ref %}


# Requisição Duplicada

Comunicado referente a requisições duplicadas para contas na API SkyHub

Identificamos chamadas duplicadas no endpoint `/orders` em nossa API, ou seja, mesmo após recebermos a requisição e retornarmos sucesso com relação a chamada feita as mesmas requisições continuam sendo realizadas.

Pedimos que nas atualizações em pedidos (`/orders`) façam apenas **UMA** requisição para cada envio de status, repita a chamada somente se receberem um retorno **HTTP** com erro.

Lembrando que as informações acima são validas para as ações feitas através do método **POST** em todas URIs do endpoint `/orders`.

{% hint style="warning" %}
Essas validações visam economizar recursos de ambos os lados, evitando processamento de dados desnecessários.
{% endhint %}


# Requisição Contas Inativas

Comunicado referente a requisições em contas indevidas na API SkyHub

Identificamos chamadas em nossa API para contas que foram inativadas e ainda assim as requisições não cessaram.

É importante que trate as respostas de nossa API de acordo com o que recebem, no caso o status de retorno é **HTTP 403** e com as possíveis mensagens:

#### Para o endpoint "/products" é retornada a mensagem:

```
{
    "error": "Conta bloqueada ou inexistente"
}
```

#### Para o endpoint "/queues/orders" é retornada a mensagem:

```
Account XXXXX is inactive
```

Para as requisições no qual recebem esse retorno o ideal é que parem de realizar chamadas em nossa API, em contrapartida é interessante validarem sobre o motivo da conta ter sido bloqueada, entrando em contato com o seller, apenas para entendimento do bloqueio e retirem essas credenciais da lista de requisições.

{% hint style="warning" %}
Essas validações visam economizar recursos de ambos os lados, evitando processamento de dados desnecessários.
{% endhint %}


# Entrega Agendada by Direct

Este comunicado tem como objetivo informar que o serviço B2W Entrega by Direct contará com a opção de Entrega Agendada

Gostaríamos de compartilhar com você que a B2W também terá a opção de **Entrega Agendada.**

&#x20;Esta opção **só está disponível** para o lojista que utiliza o serviço **B2W Entrega by Direct.**

O prazo da entrega agendada será sempre calculado da seguinte forma:

> &#x20;**20 dias úteis de entrega agendada + prazo de expedição + prazo para o transporte**

&#x20;Nos pedidos integrados na SkyHub disponibilizaremos o campo **"delivery\_contract\_type"** com o dado **"SCHEDULED"**, indicando que trata-se de uma entrega agendada.

Segue abaixo o exemplo dos campos de um pedido com entrega agendada:

```
"calculation_type": "b2wentregadirect"
"delivery_contract_type": "SCHEDULED",
"estimated_delivery": "2020-00-00T00:00:00-03:00",
"expedition_limit_date": "2020-00-20T00:00:00-03:00",
```

Para esses pedidos, é importante calcular 20 dias úteis a partir da data de aprovação do pagamento para então seguir com o procedimento padrão de faturamento e envio.

Lembrando que, durante esse período (20 dias úteis) o pedido ficará bloqueado no marketplace para atualizações como integração dos dados da nota fiscal.

{% hint style="warning" %}
É importante entender a funcionalidade desse serviço para que trate o pedido no momento correto!
{% endhint %}


# Headers para Requisições

Este comunicado possuí o objetivo de indicar os headers corretos para requisições na API SkyHub

**Como o header incorreto está na requisição?**\
\
O header incorreto é referente ao Token(X-Api-Key da SkyHub) e está da seguinte forma:

> X-User-Token: XXXX

&#x20;**Como o header deve ser informado na requisição?**\
\
O header que devem possuir na requisição para a SkyHub, é o seguinte:

> X-Api-Key: XXXX

&#x20;**Quais são os headers para requisições na SkyHub?**\
\
O headers necessários para as requisições na API da SkyHub devem ser os seguintes e são obrigatórios:

```
#Headers de autenticação
X-User-Email: email_de_usuario,
X-Api-Key: token_de_integracao,
X-Accountmanager-Key: token_account,
Accept: application/json,
Content-Type: application/json
```

{% hint style="warning" %}
É importante a alteração, pois, pode retornar erro as requisições feitas para a API SkyHub.
{% endhint %}


# Consumo de Pedidos

O objetivo deste comunicado é informar qual é a forma correta de consumir pedidos na API da SkyHub

&#x20;**Como os pedidos podem estar sendo consumidos?**\
\
Os pedidos podem estar sendo consumidos através do: **GET "/orders/{code}"**, após isso é feito um **PUT "/orders/{code}/exported/"**, que está incorreto.\
\
Nesta ação o pedido consta como não consumido, ocasionando o aumento da fila de integração de pedidos. Nesse formato de consumo, as mensagens não saem da fila de pedidos, o que significa um tempo maior para o lojista tratar o pedido e enviar a informação para o marketplace.\
\
**Como deve ser consumido?**\
\
Para consumir os pedidos, deve ser efetuado o GET "**/queues/orders**", onde será apresentado o primeiro pedido disponível na fila de integração de pedidos. Após o GET, deve ser feito o DELETE "**/queues/orders/{code}**", conforme documentação:

{% content-ref url="/pages/-MHCsNave609yHnue64k" %}
[Consumo de Pedidos - Queues](/pedidos/consumo-de-pedidos-queues)
{% endcontent-ref %}

Os pedidos devem ser consumidos pela "**queues/orders"**, para que não cause impacto ao seller, ou seja, para que os pedidos integrem corretamente.

{% hint style="warning" %}
O endpoint "**/orders/{code}/exported/**" será **descontinuado** no dia **01/05/2020**, sendo assim não conseguirão realizar essa ação.
{% endhint %}


# Atributo Data Faturamento

Comunicado referente a inclusão de atributo no endpoint "/invoice"

Incluímos um novo atributo no POST de atualização para o status "**Faturado**" (**invoice**).

O atributo em questão é: “**issue\_date**”, referente a data que a nota físcal foi gerada, o formato deve seguir o seguinte padrão: "**2019-01-27T12:30:00-03:00**".

#### Exemplo de requisição:

```
curl --location --request POST 'https://api.skyhub.com.br/orders/{code}/invoice' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao' \
--header 'X-Accountmanager-Key: token_account' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "status": "order_invoiced",
    "invoice": {
        "key": "99999999999999999999999999999999999999999999",
        "issue_date": "2019-01-27T12:30:00-03:00"
    }
}'
```

{% hint style="warning" %}
Caso não envie o atributo ou a informação esteja como "**null**", o “**issue\_date**” será considerado como a data de envio da requisição para a SkyHub.
{% endhint %}


# Atributo Data Enviado

Comunicado referente a inclusão de atributo no endpoint "/shipments"

Incluímos um novo atributo no POST de atualização para o status "**Enviado**" (**shipments**).

O atributo em questão é: “**delivered\_carrier\_date**”, referente a data que o pedido foi entregue a transportadora, o formato deve seguir o seguinte padrão: "**2019-01-27T12:30:00-03:00**".

#### Exemplo de requisição:

```
curl --location --request POST 'https://api.skyhub.com.br/orders/{code}/shipments' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao' \
--header 'X-Accountmanager-Key: token_account' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "status": "order_shipped",
    "shipment": {
        "code": "{code}",
        "delivered_carrier_date": "2019-01-27T12:30:00-03:00",
        "items": [
            {
                "sku": "{SKU}",
                "qty": {qty}
            }
        ],
        "track": {
            "code": "{codigo_rastreio}",
            "carrier": "{transportadora}",
            "method": "{metodo_envio}",
            "url": "{url_rastreamento}"
        }
    }
}'
```

{% hint style="warning" %}
Caso não envie o atributo ou a informação esteja como "**null**", o “**delivered\_carrier\_date**” será considerado como a data de envio da requisição para a SkyHub.
{% endhint %}


# Guias API SkyHub

Nesta seção é possível verificar de forma geral como realizar a integração com a API da Americanas, os códigos de retorno mais comuns, as melhores práticas e o limite de requisições

Siga os links abaixo e entenda melhor o funcionamento da API da Americanas:

{% content-ref url="/pages/-LMEEOvSppfqoQ89Z9i\_" %}
[Autenticação e formato dos dados](/guias-api-skyhub/autenticacao-e-formato-dos-dados)
{% endcontent-ref %}

{% content-ref url="/pages/-LMEH1LSO08Aicae4Odh" %}
[Códigos de retorno (HTTP status)](/guias-api-skyhub/codigos-de-retorno-http-status)
{% endcontent-ref %}

{% content-ref url="/pages/-LMEIs6qmjUTD91qP7FL" %}
[Limite de requisições](/guias-api-skyhub/limite-de-requisicoes)
{% endcontent-ref %}

{% content-ref url="/pages/-LMEVyhTwLlMXiA11Zek" %}
[Melhores práticas](/guias-api-skyhub/melhores-praticas)
{% endcontent-ref %}


# Autenticação e formato dos dados

Neste tópico iremos abordar quais são os headers e o formato necessários para integrar com a API da Americanas. Importante seguir todas as instruções para que a requisição ocorra com sucesso

## Autenticação

Todas as chamadas aos serviços disponíveis na API SkyHub devem ser autenticadas a partir do **e-mail do usuário**, **token de acesso** e ***account manager key***. Essas informações devem ser enviadas no cabeçalho (header) de cada requisição conforme descrito abaixo:

```
# Headers de autenticação
X-User-Email: email_de_usuario 
X-Api-Key: token_de_integracao de sua conta SkyHub
X-Accountmanager-Key: token_account único de cada Plataforma/ERP 
```

{% hint style="warning" %}
**Todos os parâmetros acima são informados durante o envio da conta teste e são&#x20;**<mark style="color:red;">**obrigatórios**</mark>**&#x20;para efetuar as requisições, ou seja, somente plataformas/ERPs em processo de homologação/homologados possuirão esses dados.**

\
Se você/seu sistema não possui ainda uma homologação com a API da Americanas, deverá [solicitar entrando em contato conosco](/processo-de-homologacao/perfil-para-homologacao#quais-os-perfis).&#x20;
{% endhint %}

## Formato dos dados

Na troca de mensagens com a API da Americanas, será utilizado o padrão *JSON (JavaScript Object Notation)*. Por isso, cada requisição deve conter os valores adequados nos cabeçalhos **Accept** e **Content-Type** (*application/json*).

```
# Headers do formato de dados
Accept: application/json
Content-Type: application/json
```

## Encoding (charset)

Os dados enviados (via POST ou PUT) devem estar de acordo com o *charset* **UTF-8**.

Caso seja utilizado um *encoding* diferente, será retornado o erro de "**Tipo de dado não suportado**" (HTTP <mark style="color:red;">**415**</mark>).

{% hint style="danger" %}
&#x20;**\[IMPORTANTE] -** Mesmo que o header "Accept" indique o uso do charset UTF-8, se os dados do body não estiverem no *encoding* correto, também será retornado o erro HTTP <mark style="color:red;">415</mark>.
{% endhint %}

### **Como ficam os headers**

```
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
```


# Códigos de retorno (HTTP status)

Neste tópico são apresentados os possíveis códigos de retorno na API e a mensagem que será visualizada, seja em caso de sucesso ou de erro

A API da Americanas utiliza o grupo padrão dos status HTTP para indicar se uma requisição teve sucesso ou não. No geral:

* Códigos HTTP <mark style="color:green;">**2XX**</mark> indicam que a requisição foi realizada com sucesso;<br>
* Códigos HTTP <mark style="color:red;">**4XX**</mark> indicam que a requisição contém alguma informação incorreta - dados de acesso, ausência de um campo obrigatório, entre outros;<br>
* Códigos HTTP <mark style="color:red;">**5XX**</mark> indicam algum erro nos servidores da API. Esses são raros e caso receba esse código, deve entrar em contato com o nosso suporte.

## Status HTTP

Os status HTTP mais comuns são:

<table data-header-hidden><thead><tr><th width="137" align="center">Status</th><th>Descrição</th></tr></thead><tbody><tr><td align="center"><strong>Status</strong></td><td><strong>Descrição</strong></td></tr><tr><td align="center">200</td><td><strong>Sucesso</strong> (A requisição foi processada com sucesso)</td></tr><tr><td align="center">201</td><td><strong>Criado</strong> (A requisição foi processada com sucesso e resultou em um novo recurso criado)</td></tr><tr><td align="center">204</td><td><strong>Sem conteúdo</strong> (A requisição foi processada com sucesso e não existe conteúdo adicional na resposta)</td></tr><tr><td align="center">400</td><td><strong>Requisição mal formada</strong> (A requisição não está de acordo com o formato esperado. Verifique o JSON (body) que está sendo enviado)</td></tr><tr><td align="center">401</td><td><strong>Não autenticado</strong> (Os dados de autenticação estão incorretos. Verifique no cabeçalho (header) da requisição o e-mail e o token)</td></tr><tr><td align="center">403</td><td><strong>Não autorizado</strong> (Você está tentando acessar um recurso para o qual não tem permissão)</td></tr><tr><td align="center">404</td><td><strong>Não encontrado</strong> (Você está tentando acessar um recurso que não existe na SkyHub)</td></tr><tr><td align="center">406</td><td><strong>Formato não aceito</strong> (A SkyHub não suporta o formato de dados especificado no cabeçalho (Accept))</td></tr><tr><td align="center">415</td><td><strong>Formato de mídia não aceito</strong> (A SkyHub não consegue processar os dados enviados por conta de seu formato. Certifique-se do uso do charset UTF-8 (tanto no header "Content-Type", quanto no próprio body da requisição))</td></tr><tr><td align="center">422</td><td><strong>Erro semântico</strong> (Apesar do formato da requisição estar correto, os dados ferem alguma regra de negócio (por exemplo: transição inválida do status de pedido))</td></tr><tr><td align="center">429</td><td><strong>Limite de requisições ultrapassado</strong> (Você fez mais requisições do que o permitido em um determinado recurso)</td></tr><tr><td align="center">500 ou 502</td><td><strong>Erro interno</strong> (Ocorreu um erro no servidor da SkyHub ao tentar processar a requisição)</td></tr><tr><td align="center">503</td><td><strong>Serviço indisponível</strong> (A API da SkyHub está temporariamente fora do ar)</td></tr><tr><td align="center">504</td><td><strong>Timeout</strong> (A requisição levou muito tempo e não pôde ser processada)</td></tr></tbody></table>

## Erros

Sempre que ocorrer um erro, a API retornará no corpo (body) da mensagem um JSON de acordo com o formato abaixo:

```
{error: "mensagem de erro"}
```

{% hint style="warning" %}
**A tratativa dos erros recebidos é imprescindível para a fluidez do fluxo de integração.**

Navegue pelo nosso guia [Consulta de Erros](https://desenvolvedores.skyhub.com.br/sync_errors/consulta-erros-de-sincronizacao-e-producao) para maiores detalhes sobre a visualização dos erros de integração.&#x20;
{% endhint %}


# Limite de requisições

Para manter a integridade da API, os métodos e endpoints possuem limites de requisição. Neste tópico é possível verificar o rate limit para os recursos disponíveis na API

Para garantir o bom desempenho da API, as integrações serão submetidas a um limite de requisições (*throttling*). **Este limite é definido por endpoint + método**, seguindo os valores descritos abaixo:

<table data-header-hidden><thead><tr><th width="201.33333333333331">Endpoint</th><th width="203" align="center">Limite de Requisições </th><th align="center"> Métodos</th><th></th></tr></thead><tbody><tr><td><strong>Endpoint</strong></td><td align="center"><mark style="color:red;"><strong>Limite de Requisições</strong></mark> </td><td align="center"> <strong>Métodos</strong></td><td><strong>Observações</strong></td></tr><tr><td><strong>Products</strong></td><td align="center">9 por segundo</td><td align="center">GET</td><td>Buscar lista ou SKU individual compartilham do mesmo limite</td></tr><tr><td><strong>Products</strong></td><td align="center">9 por segundo</td><td align="center">POST, PUT, DELETE</td><td>Limite definido para cada método</td></tr><tr><td><strong>Variations</strong></td><td align="center">9 por segundo</td><td align="center">PUT, DELETE</td><td>Limite definido para cada método</td></tr><tr><td><strong>Orders</strong></td><td align="center">9 por segundo</td><td align="center">POST, PUT, DELETE</td><td>Cada endpoint em orders possui 9/s para cada método</td></tr><tr><td><strong>Orders</strong></td><td align="center">1 por segundo</td><td align="center">GET</td><td>Buscar lista ou pedido individual possuem seu próprio limite</td></tr><tr><td><strong>Queues</strong></td><td align="center">9 por segundo</td><td align="center">GET, DELETE</td><td>Limite definido para cada método</td></tr><tr><td><strong>Shipments (PLP)</strong></td><td align="center">9 por segundo</td><td align="center">GET, POST, DELETE</td><td>Cada endpoint em shipments possui 9/s para cada método</td></tr><tr><td><strong>Stores</strong></td><td align="center">1 por segundo</td><td align="center">GET</td><td>Limite definido para cada método</td></tr><tr><td><strong>Stores</strong></td><td align="center">9 por segundo</td><td align="center">POST, PUT</td><td>Limite definido para cada método</td></tr><tr><td><strong>SAC</strong></td><td align="center">9 por segundo</td><td align="center">POST, PUT, PATCH, GET</td><td>Limite definido para cada método</td></tr><tr><td><strong>Fulfillment</strong></td><td align="center">1 por segundo</td><td align="center">POST, GET</td><td>Cada endpoint em fulfillment possui 1/s para cada método</td></tr><tr><td><strong>Rehub</strong></td><td align="center">27 por segundo</td><td align="center">POST, GET, DELETE</td><td>Cada endpoint em rehub possui 27/s para cada método</td></tr><tr><td><strong>QnA</strong></td><td align="center">9 por segundo</td><td align="center">POST</td><td>Limite definido para o método</td></tr><tr><td><strong>Outros endpoints</strong></td><td align="center">1 por segundo</td><td align="center">POST, PUT, GET, DELETE</td><td>Limite definido para cada método</td></tr></tbody></table>

{% hint style="danger" %}
**Caso a integração ultrapasse os limites estabelecidos será retornado erro HTTP&#x20;**<mark style="color:red;">**429**</mark>**.**

É importante que ao receber o primeiro retorno HTTP 429 a sua integração aguarde uma nova janela de requisições para não ocorrer no mesmo erro.
{% endhint %}

{% hint style="info" %}
**O limite de requisições é definido por token, ou seja, por loja.**
{% endhint %}


# Melhores práticas

Nesta seção é possível verificar as melhores práticas para a execução de requisições e como seguir diante erros retornados pela API

### Monitore a sua aplicação

#### Você monitora os status HTTP 4XX que a sua aplicação está recebendo?&#x20;

Caso receba um retorno HTTP 4XX, é necessário efetuar a requisição novamente e em paralelo analisar o erro para identificar o seu motivo e realizar as devidas correções.

Uma vez efetuada a correção, caso o erro persista, pedimos que entre em contato para que possamos analisar.

#### Você monitora os status HTTP 5XX que a sua aplicação está recebendo?&#x20;

Uma vez que o retorno do erro é HTTP 5XX, pedimos que efetue uma nova tentativa, pois o mesmo pode se tratar de uma intermitência.

Caso o erro persista, pedimos que entre em contato para que possamos analisar a causa raiz do erro.

{% hint style="info" %}
Caso necessário entrar em contato com a equipe de suporte ao desenvolvimento de nossa API, basta encaminhar as suas dúvidas para o e-mail *<mark style="color:blue;"><srv.mktp.api@americanas.io></mark>*.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Infraestrutura SkyHub

Nossa infraestrutura está localizada nos servidores da Virginia, caso seus servidores estejam alocados em outra região podemos ter um tempo de resposta acrescido em **200ms**.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Cuidado com o limite de requisições

Tenha cuidado para não ultrapassar os [limites de requisições](/guias-api-skyhub/limite-de-requisicoes) da nossa API. Caso a sua aplicação receba um HTTP 429, ela deve parar de fazer requisições por um tempo até que uma nova janela comece a contar.

{% hint style="danger" %}
Cuidado com datas com um alto volume de vendas, como a **Black Friday**. Acontece do desenvolvedor colocar mais máquinas para ter uma "integração mais rápida" e ser barrado no nosso limite de requisições.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Atualize apenas o necessário

Alguns recursos da API, em especial a de produtos, permitem que apenas alguns campos sejam passados na requisição de atualização.&#x20;

Se deseja atualizar apenas o campo "*qty*" do produto, por exemplo, recomendamos que o faça semelhante à requisição abaixo:

```
curl --request PUT \
  --url https://api.skyhub.com.br/products/{sku}\
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-User-Email: email_de_usuario' \
  --header 'X-Api-Key: token_de_integracao' \
  --header 'X-Accountmanager-Key: token_account_da_plataforma'\
  --data '{
          "product": {
              "qty": 0
            }
          }'
```

Como podemos observar na requisição acima, é enviada apenas a atualização do estoque, ou seja, não é enviada a estrutura completa do produto.

Desta forma sua aplicação terá que trafegar menos dados na rede, a API terá que processar uma carga menor de dados e haverá um desempenho melhor.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Atributo de marca

Desde Março/2025 é necessário enviar no corpo do produto o identificador da marca, obtido após uma [**consulta em lista de marcas disponíveis**](/produtos/consultar-marcas).

Para que o produto tenha um filtro bem definido por meio de marca, é importante que este atributo seja declarado de forma correta.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FpP7AKA03OOwJUIY1OZIr%2Ffile.excalidraw.svg?alt=media&amp;token=fbed60e6-7517-42ce-a02e-fde2bd2f330e" alt="" class="gitbook-drawing">

### Categorização de itens

Desde Março/2025 é necessário categorizar os itens antes de criá-los no Marketplace.

Para isso, foi [**disponibilizada uma consulta**](/produtos/categorizacao/consultar-categorias) onde será possível percorrer todas as categorias da Americanas Marketplace e assim enviar no JSON do produto o identificador da categoria desejada.

É uma boa prática o lojista identificar em qual nível de categoria deseja catalogar seus itens e assim enviar no corpo do produto o identificador referente ao nível escolhido.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FeFkC19JvYJsGR12UPrED%2Ffile.excalidraw.svg?alt=media&amp;token=cbd2cb38-8303-4976-b040-cf9acdd71e3e" alt="" class="gitbook-drawing">

### Imagens

#### Limite de imagens

Existe um limite de imagens a serem enviadas para a API da Americanas.&#x20;

Neste caso o total de imagens por produto passa a ser 20 tanto na estrutura do **produto simples** quanto para as **variações**. Sendo assim, caso tenha uma estrutura de **produto variável** é possível enviar 20 imagens para a variação **SKU A** e 20 imagens para a variação **SKU B**.&#x20;

{% hint style="warning" %}
Caso envie mais de 20 imagens serão consideradas somente as **20 primeiras**.
{% endhint %}

#### Imagens da variação:

Caso no JSON constem imagens no produto pai e nas variações, apenas as imagens das variações serão levadas em conta no Marketplace.&#x20;

Se no JSON as imagens forem enviadas somente no pai, as variações irão assumir as imagens do produto pai.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Consulta de pedidos via API

Temos um limitador de retorno (**GET**) de no máximo 10.000 registros para consulta de pedidos.

Caso tenha mais registros para serem retornados o ideal é realizar filtros para adequar a quantidade de retorno de acordo com o limite existente.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Consumo de pedidos

Para <mark style="color:red;">consumir pedidos</mark>, todo o processo deve ser feito pelo endpoint [`/queues/orders`](/pedidos/consumo-de-pedidos-queues), para que a SkyHub saiba que o pedido foi integrado.

Embora seja possível listar os pedidos via GET `/orders`, este endpoint como dito deve ser utilizado apenas para listar/consultar e não para consumir.


# Copy of Melhores práticas

Nesta seção é possível verificar as melhores práticas para a execução de requisições e como seguir diante erros retornados pela API

### Monitore a sua aplicação

#### Você monitora os status HTTP 4XX que a sua aplicação está recebendo?&#x20;

Caso receba um retorno HTTP 4XX, é necessário efetuar a requisição novamente e em paralelo analisar o erro para identificar o seu motivo e realizar as devidas correções.

Uma vez efetuada a correção, caso o erro persista, pedimos que entre em contato para que possamos analisar.

#### Você monitora os status HTTP 5XX que a sua aplicação está recebendo?&#x20;

Uma vez que o retorno do erro é HTTP 5XX, pedimos que efetue uma nova tentativa, pois o mesmo pode se tratar de uma intermitência.

Caso o erro persista, pedimos que entre em contato para que possamos analisar a causa raiz do erro.

{% hint style="info" %}
Caso necessário entrar em contato com a equipe de suporte ao desenvolvimento de nossa API, basta encaminhar as suas dúvidas para o e-mail *<mark style="color:blue;"><srv.mktp.api@americanas.io></mark>*.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Infraestrutura SkyHub

Nossa infraestrutura está localizada nos servidores da Virginia, caso seus servidores estejam alocados em outra região podemos ter um tempo de resposta acrescido em **200ms**.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Cuidado com o limite de requisições

Tenha cuidado para não ultrapassar os [limites de requisições](/guias-api-skyhub/limite-de-requisicoes) da nossa API. Caso a sua aplicação receba um HTTP 429, ela deve parar de fazer requisições por um tempo até que uma nova janela comece a contar.

{% hint style="danger" %}
Cuidado com datas com um alto volume de vendas, como a **Black Friday**. Acontece do desenvolvedor colocar mais máquinas para ter uma "integração mais rápida" e ser barrado no nosso limite de requisições.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Atualize apenas o necessário

Alguns recursos da API, em especial a de produtos, permitem que apenas alguns campos sejam passados na requisição de atualização.&#x20;

Se deseja atualizar apenas o campo "*qty*" do produto, por exemplo, recomendamos que o faça semelhante à requisição abaixo:

```
curl --request PUT \
  --url https://api.skyhub.com.br/products/{sku}\
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-User-Email: email_de_usuario' \
  --header 'X-Api-Key: token_de_integracao' \
  --header 'X-Accountmanager-Key: token_account_da_plataforma'\
  --data '{"qty":0}'
```

Como podemos observar na requisição acima, é enviada apenas a atualização do estoque, ou seja, não é enviada a estrutura completa do produto.

Desta forma sua aplicação terá que trafegar menos dados na rede, a API terá que processar uma carga menor de dados e haverá um desempenho melhor.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Atributo de marca

Desde Março/2025 é necessário enviar no corpo do produto o identificador da marca, obtido após uma [**consulta em lista de marcas disponíveis**](/produtos/consultar-marcas).

Para que o produto tenha um filtro bem definido por meio de marca, é importante que este atributo seja declarado de forma correta.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FpP7AKA03OOwJUIY1OZIr%2Ffile.excalidraw.svg?alt=media&amp;token=fbed60e6-7517-42ce-a02e-fde2bd2f330e" alt="" class="gitbook-drawing">

### Categorização de itens

Desde Março/2025 é necessário categorizar os itens antes de criá-los no Marketplace.

Para isso, foi [**disponibilizada uma consulta**](/produtos/categorizacao/consultar-categorias) onde será possível percorrer todas as categorias da Americanas Marketplace e assim enviar no JSON do produto o identificador da categoria desejada.

É uma boa prática o lojista identificar em qual nível de categoria deseja catalogar seus itens e assim enviar no corpo do produto o identificador referente ao nível escolhido.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FeFkC19JvYJsGR12UPrED%2Ffile.excalidraw.svg?alt=media&amp;token=cbd2cb38-8303-4976-b040-cf9acdd71e3e" alt="" class="gitbook-drawing">

### Atributos na SkyHub

Nossa estrutura de criação de atributos não possibilita que trabalhe com a mesma **string** de um atributo com **case sensitive** tentando diferenciar essa criação. Com isso é necessário que sempre utilize em seus produtos o atributo que foi usado pela primeira vez.

\
Por exemplo, se em um primeiro momento foi criado um atributo **teste** (todas as letras em minúsculo) no array de `specifications`, precisamos que todos os seus produtos da conta recebam o atributo como **teste** (todas as letras em minúsculo). Caso em algum momento após a criação, o atributo receba uma grafia diferente - como **Teste** - não será possível indexá-lo ao produto na SkyHub.&#x20;

{% hint style="warning" %}
**IMPORTANTE – Conforme o fluxo de CONTA ÚNICA, onde a conta da loja será a mesma independente da Plataforma/ERP que estiver operando, pode ser que o padrão de um sistema não seja o mesmo de outra, por isso é importante saber que pode haver diferenças e orientar os lojistas de acordo com o atributo da maneira que você utiliza.**
{% endhint %}

{% hint style="info" %}
Ao utilizar o endpoint [*`/attributes`*](/produtos/outros-recursos-de-produtos/endpoint-atributos) é possível consultar quais atributos estão criados na conta.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Atributo Garantia

Para o atributo [**Garantia**](/comunicados/comunicados-2021/atributo-garantia-prazo-limite-06-09-21) é esperado o valor numérico e essa informação é a representação da garantia do produto em meses, além disso o atributo deve ser criado no array `specifications` do produto na API.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Limite de Imagens

Existe um limite de imagens a serem enviadas para a API da Americanas.&#x20;

Neste caso o total de imagens por produto passa a ser 20 tanto na estrutura do **produto simples** quanto para as **variações**. Sendo assim, caso tenha uma estrutura de **produto variável** é possível enviar 20 imagens para a variação **SKU A** e 20 imagens para a variação **SKU B**.&#x20;

{% hint style="warning" %}
Caso envie mais de 20 imagens serão consideradas somente as **20 primeiras**.
{% endhint %}

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Consulta de pedidos via API

Temos um limitador de retorno (**GET**) de no máximo 10.000 registros para consulta de pedidos.

Caso tenha mais registros para serem retornados o ideal é realizar filtros para adequar a quantidade de retorno de acordo com o limite existente.

<img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FwmJ9m5qDUgnYMEPLIPWY%2Ffile.excalidraw.svg?alt=media&amp;token=b2f3df4e-679e-4599-878f-d461523ea656" alt="" class="gitbook-drawing">

### Consumo de pedidos

Para <mark style="color:red;">consumir pedidos</mark>, todo o processo deve ser feito pelo endpoint [`/queues/orders`](/pedidos/consumo-de-pedidos-queues), para que a SkyHub saiba que o pedido foi integrado.

Embora seja possível listar os pedidos via GET `/orders`, este endpoint como dito deve ser utilizado apenas para listar/consultar e não para consumir.


# Recursos

São chamados de recursos os objetos a serem tratados na API, como por exemplo: produtos, pedidos e outros. Nessa seção mostraremos os recursos disponíveis na API da Americanas

{% hint style="danger" %}
**Todo recurso desenvolvido deve ser homologado pelo time responsável pela API da Americanas.**&#x20;

Para maiores informações, entrar em contato com *<mark style="color:blue;"><srv.mktp.api@americanas.io></mark>*.&#x20;
{% endhint %}

Navegue pelos recursos abaixo e acompanhe o resumo destes endpoints:

{% content-ref url="/pages/-MF2EwvSFJrIB8h3CZ8p" %}
[Produtos](/recursos/products-endpoints)
{% endcontent-ref %}

{% content-ref url="/pages/-MFln8thW19qAAGwduDR" %}
[Rehub](/recursos/rehub)
{% endcontent-ref %}

{% content-ref url="/pages/-MF2GfaRsbmZk4V3nTes" %}
[Pedidos](/recursos/orders-endpoints)
{% endcontent-ref %}

{% content-ref url="/pages/-MF2TeZVGzjE3jT-uLAe" %}
[Etiquetas](/recursos/shipments)
{% endcontent-ref %}

{% content-ref url="/pages/-MFXW\_1tec8SRTZMDbkP" %}
[Fulfillment](/recursos/fulfillment)
{% endcontent-ref %}

{% content-ref url="/pages/-MFlu79IXj7Kv\_RWKUnV" %}
[Multi Origem](/recursos/multi-origem)
{% endcontent-ref %}

{% content-ref url="/pages/-MFXX\_uA3yFnSc8PcR8a" %}
[Perguntas e Respostas](/recursos/perguntas)
{% endcontent-ref %}

{% content-ref url="/pages/-MFpZdxtVoDD2Hu\_pccT" %}
[SAC](/recursos/sac)
{% endcontent-ref %}

{% content-ref url="/pages/ypk4yCd744KzTt0Ucw06" %}
[Credenciamento](/recursos/credenciamento)
{% endcontent-ref %}


# Produtos

O recurso de produtos permite a criação, atualização e consulta de itens, variações e atributos

### `/products`

A API possui um conjunto de endpoints relacionados ao recurso de produtos que envolve a **criação** de um novo produto ou variação, **atualização** ou **exclusão** do item previamente criado. Além disso, também é possível realizar a **consulta** individual ou geral dos produtos existentes na conta.

Cada endpoint, parâmetros e/ou sub rotas podem ser utilizados para acessar os recursos, sendo a URI base de produtos `https://api.skyhub.com.br/products`

### `/variations`

A utilização do recurso de variações depende da existência de produtos criados previamente na API, pois por esses endpoints só é possível **consultar**, **atualizar** ou **deletar variações já existentes em produtos**. A URI base do recurso de variações é `https://api.skyhub.com.br/variations`

Para esse recurso é obrigatório informar no endpoint o parâmetro correspondente ao SKU da variação do produto criada anteriormente.

### ~~`/attributes`~~

~~Os atributos que serão utilizados nos produtos para compor a ficha técnica, por exemplo, podem ser criados previamente diretamente no endpoint `https://api.skyhub.com.br/attributes`, basta que seja referenciado na criação do produto o nome do atributo e seu dado correspondente.~~

~~O recurso de atributos aceita dois métodos: um para **criação** de atributos e outro para **atualização** do atributo criado, sendo que neste segundo é exigido como parâmetro no endpoint o nome do atributo a ser atualizado.~~

~~Lembrando que a própria ação de criação do produto já é o suficiente para a criação dos atributos na API, independente de terem sido criados previamente ou não.~~

### `/categories`

{% hint style="warning" %}
Este recurso foi descontinuado na API. Para maiores informações, consulte a nossa seção de comunicados - [Inativação do endpoint /categories](/comunicados/comunicados-2022/inativacao-do-endpoint-categories)
{% endhint %}

Assim como no endpoint de atributos, as categorias também podem ser criadas previamente pelo endpoint `https://api.skyhub.com.br/categories`, onde cada categoria criada receberá um código (code) que poderá ser referenciado na criação do produto.

Se a categoria não for criada previamente, a ação de criação do produto fará essa ação automaticamente.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/-MG4GSB7sjHbPjb5J3XE" %}
[> Integração Produto](/produtos/integracao-produtos)
{% endcontent-ref %}


# Rehub

O rehub vem com a intenção de automatizar vários aspectos da integração via API

### `/rehub/product_actions`

O *rehub* vem com a intenção de auxiliar com algumas funcionalidades para automatizar processos para os quais antes era necessário acessar o portal da SkyHub ou do marketplace, como conexão e desconexão de produtos via API.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/e9qOxU8apr9BUcIYpyEj" %}
[> Integração Rehub](/rehub/integracao-rehub)
{% endcontent-ref %}


# Pedidos

A integração de pedidos abrange toda a tratativa do ciclo de vida de uma entrega, desde a criação até a sua finalização

### `/orders`

O conjunto de endpoints para o recurso de pedidos corresponde a atualização de status, que compreende o envio do faturamento (como chave ou XML da nota fiscal), envio das informações de expedição, como rastreamento e transportadora, informações de entrega e cancelamento.

Tanto a criação quanto a aprovação do pedido são feitas pelo marketplace, porém para fins de homologação estes recursos estão disponíveis nas contas de teste.

{% hint style="danger" %}
Através do `/orders` também é possível consultar detalhes de uma entrega, porém é imprescindível atentar-se ao [rate limit](/guias-api-skyhub/limite-de-requisicoes) do endpoint para que a consulta não gere impactos negativos para o ciclo do pedido.
{% endhint %}

### `/queues/orders`

Este recurso corresponde a fila de integração de pedidos, onde serão disponibilizados todos os novos pedidos e status, como aprovado, por exemplo.

<mark style="color:red;">A ordem de retorno dos pedidos nesta fila é aleatória, sendo obrigatório o consumo de todo o conteúdo da mesma</mark>, feito através da obtenção do pedido e posterior remoção do mesmo, mantendo a fila sempre limpa.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/-MHCrlg0zOcvmZMP1oKw" %}
[> Integração Pedido](/pedidos/integracao-pedido)
{% endcontent-ref %}


# Erros

O recurso de consulta de erros permite a visualização de reprovas apontadas para produtos e pedidos

### `/sync_errors`

Na tentativa de enviar um produto da API para o marketplace é possível que ocorram reprovas na validações do item - como, por exemplo, por um formato inesperado no preenchimento de um atributo ou ausência de campos obrigatórios - assim como na importação de um novo pedido ou atualização de status ao seguir o ciclo de vida dos pedidos.

Nesse sentido, a fim de visualizar os erros referidos, oferecemos endpoints para realização de consultas via API.&#x20;

Através da URI `https://api.skyhub.com.br/sync_errors` a API dá autonomia para a plataforma disponibilizar no seu próprio sistema os erros registrados nesse endpoint.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/V2UykRvpfwilCatPCdCq" %}
[Consulta de Erros de Sincronização e Produção](/sync_errors/consulta-erros-de-sincronizacao-e-producao)
{% endcontent-ref %}


# Etiquetas

O recurso de etiquetas traz a possibilidade de emitir um conjunto de PLP diretamente via API

{% hint style="warning" %}
Neste serviço a API atua como um **proxy** intermediando o parceiro e o marketplace, portanto **possíveis indisponibilidades para obtenção das PLPs no marketplace também refletirão no consumo deste recurso**.
{% endhint %}

### `/shipments/b2w`

O *path* `/shipments/b2w` é a base para um conjunto de recursos de emissão de PLPs diretamente no ambiente do parceiro, havendo uma série de sub-rotas e diferentes métodos para consulta de pedidos aptos à criação de PLPs, agrupamento de vários pedidos em uma PLP, visualização da PLP criada e deleção de uma PLP agrupada.

### `/shipments/b2w/collectables`

O `/shipments/b2w/collectables` possibilita a consulta de pedidos aptos à solicitação de coleta por parte do serviço de entregas da Americanas Direct.

### `/shipments/b2w/confirm_collection`

Este endpoint é utilizado para realizar a solicitação de coleta de um ou mais pedidos por parte da transportadora Americanas Direct.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/-LUAEzfAE-DUQh6mY-3H" %}
[> Integração Etiqueta](/etiquetas-americanas-entrega/integracao-etiqueta)
{% endcontent-ref %}


# Fulfillment

O Fulfillment trata-se de uma solução completa de logística oferecida pelo marketplace Americanas para seus parceiros

### `/fulfillment/b2w`

Neste endpoint disponibilizamos um conjunto de sub rotas para consulta e faturamento de pedidos Fulfillment.

### `/taxes`

Dentro do Fulfillment existe a possibilidade de criar Regras Fiscais e Tributárias e vinculá-las a produtos específicos a fim de disponibilizar a geração da NFe para o pedido Fulfillment proveniente do marketplace Americanas.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/-MfNl2hDHT1j-Sq\_wcc4" %}
[> Integração Fulfillment](/americanas-fulfillment/integracao-fulfillment)
{% endcontent-ref %}


# Multi Origem

Multi Origem é uma funcionalidade na qual o seller pode possuir diversos Centros de Distribuição em apenas uma conta

### `/rehub/stores`

Esse é um serviço oferecido pelo marketplace Americanas no qual é possível sinalizar vários pontos de uma só loja para envio de mercadoria, dessa forma o *seller* é capaz de oferecer um frete mais competitivo de acordo com a região.

### `/stores`

Através do Multi CD/Multi Origem são fornecidas opções de criação e atualização de estoque em lote para as warehouses criadas para a conta.

#### Navegue pela seção relacionada para conhecer mais detalhes sobre este recurso:

{% content-ref url="/pages/fvLt1S5Ljv2vvLQ9l1Ia" %}
[> Integração Multi Origem](/multi-cd/integracao-multi-origem)
{% endcontent-ref %}


# Perguntas e Respostas

O recurso de Perguntas e Respostas destina-se a interação de vendedores e clientes pré-venda

{% hint style="danger" %}
**Recurso descontinuado em Março/2025.**
{% endhint %}

### `/qna`

Através deste endpoint é possível cadastrar uma URL (*webhook*) para receber via API as perguntas realizadas pelo potencial cliente nos sites de venda e oferecer uma resposta capaz de auxiliá-lo antes da realização da compra.

####


# SAC

O recurso de SAC permite a consulta de tickets e instâncias abertos no marketplace Americanas, assim como a interação entre seller e cliente

{% hint style="danger" %}
**Recurso descontinuado em Março/2025.**
{% endhint %}

### `/sac`

Neste endpoint disponibilizamos um conjunto de sub rotas para diversos fins relacionados ao atendimento pós venda do cliente final no marketplace conforme a seguir:

* Criação, consulta e atualização de mensagens de SAC (chats);
* Consulta de instâncias de SAC;
* Outras consultas relacionadas, como reembolsos e ações disponíveis no ticket (cancelamento, devolução e troca).

{% hint style="warning" %}
Neste serviço a SkyHub atua apenas como um **proxy**, intermediando o parceiro e a API de SAC do marketplace Americanas.
{% endhint %}

####


# Credenciamento

O recurso de Credenciamento possibilita que ao contratar a plataforma/ERP, o seller seja capaz de fornecer seus dados para a solicitação de uma conta no marketplace Americanas

{% hint style="danger" %}
**Recurso descontinuado em Março/2025.**
{% endhint %}

### `/b2w/signup`

A API de Credenciamento possibilita que ao contratar a plataforma/ERP, o *seller* seja capaz de fornecer seus dados para a solicitação de uma conta no marketplace Americanas e, consequentemente, na API.

Com a homologação do recurso, no momento em que um lojista contrata a sua plataforma/ERP é possível oferecer para este *seller* a vantagem de solicitar uma conta no marketplace Americanas diretamente através de seu sistema.

####


# Processo de Homologação

Qualquer solução desenvolvida ou a ser e que realize requisições em nossa API, precisa passar pela homologação de recursos. Nesta seção iremos informar todos os passos necessários para isso.

{% content-ref url="/pages/-MFgKKnLxQZ5mI7k2oQO" %}
[Perfil para Homologação](/processo-de-homologacao/perfil-para-homologacao)
{% endcontent-ref %}

{% content-ref url="/pages/-MFgTC\_Z6cIZAnV79Oxm" %}
[Pré-Requisitos](/processo-de-homologacao/pre-requisitos)
{% endcontent-ref %}

{% content-ref url="/pages/-MFqwjzuEg0FPc4Pjq7X" %}
[Validações](/processo-de-homologacao/validacoes)
{% endcontent-ref %}

{% content-ref url="/pages/-MFr11lZkWd4G9aFA\_1N" %}
[Melhores Práticas](/processo-de-homologacao/melhores-praticas-valid)
{% endcontent-ref %}


# Perfil para Homologação

Abaixo explicaremos quais os perfis e como iniciar o processo de homologação do seu sistema com a API da Americanas

### Quais os perfis?

Para dar início ao processo, é necessário compreender que existem dois perfis para a homologação: **1)** **próprio**, cuja homologação será apenas para uma loja, ou **2)** homologação como **parceiro**, onde poderá disponibilizar o seu sistema/ERP/plataforma para mais de uma loja.&#x20;

Abaixo temos mais detalhes sobre os perfis apresentados:&#x20;

#### 1) Sistema próprio, desenvolvido pela loja

Se enquadram as lojas que estão desenvolvendo ou já possuem um **sistema próprio** e desejam integrá-lo através da SkyHub, a API da Americanas. Nesse perfil, o sistema será homologado para **uso exclusivo de sua loja**.

Neste caso, será necessário entrar em contato com a nossa equipe de suporte a API através do e-mail <mark style="color:blue;">**<srv.mktp.api@americanas.io>**</mark>.&#x20;

**2) Parceiros - Hub**

Nesse perfil se enquadram ERPs, plataformas ou integradoras. São sistemas que serão homologados para que no futuro possam ser distribuídos e utilizados por diversas lojas (clientes do seu sistema).&#x20;

Se você se enquadra nesse perfil, é necessário preencher o formulário de parcerias disponibilizado a seguir:&#x20;

[**Americanas Marketplace - Formulário de parcerias**](https://docs.google.com/forms/d/e/1FAIpQLSfLwGFnIatbnLNqqUgNMCWyIcy-Arj6oscronuszcKL2jCC7A/viewform)


# Pré-Requisitos

Para o processo de homologação existem pré-requisitos necessários para que as requisições ocorram com sucesso

Ao solicitar sua homologação você receberá acesso a conta teste da API, os headers obrigatórios para efetuar as requisições e a planilha com todos os pontos que iremos validar.

### Quais métodos serão utilizados para a homologação?

| Método   | Descrição |
| -------- | --------- |
| `POST`   | Criar     |
| `PUT`    | Atualizar |
| `GET`    | Buscar    |
| `DELETE` | Deletar   |

### Quais os pré-requisitos obrigatórios a serem desenvolvidos?

### Produtos:

* **Criar:** Analisaremos se a criação de produtos (POST) via API ocorreu no formato correto solicitado pela SkyHub;&#x20;
* **Atualizar:** Analisaremos se a atualização de produtos (PUT) via API ocorreu no formato correto solicitado pela SkyHub;
* **Deletar:** Analisaremos se a exclusão de produtos (DELETE) via API ocorreu no formato correto solicitado pela SkyHub.&#x20;

{% hint style="warning" %}
Todos os produtos devem conter FOTO, DESCRIÇÃO, EAN, DIMENSÃO E PESO. Veja mais detalhes em [Integração Produto](/produtos/integracao-produtos).
{% endhint %}

### Conexão via API (Rehub):

Será necessário homologar a rota rehub, que permite a conexão e desconexão de itens através da plataforma/ERP.

Analisaremos se os processos de conexão e desconexão foram devidamente realizados através do método POST.

### Pedidos:

* **Criar:** Para o processo de homologação, é necessário que sejam criados pedidos, para que possam efetuar os testes;&#x20;
* **Atualizar:** Analisaremos se as atualizações de status (POST) via API ocorreram no formato correto solicitado pela SkyHub;
* **Consumir:** Analisaremos se os pedidos estão consumidos corretamente (GET seguido de DELETE) da fila de integração (`/queues/orders`).

### Etiqueta:

Será necessário homologar todos os passos da PLP Americanas, como agrupamento de pedidos, visualização/impressão da etiqueta e solicitação de coleta (referente ao serviço Americanas Entrega Direct).

* **Aptos a Agrupamento:** Possível verificar quais pedidos estão aptos a agrupamento;
* **Agrupar:** Agrupar os pedidos em uma PLP, onde o *response* será o ID;
* **Imprimir/recuperar/visualizar:** Visualizar para efetuar a impressão da etiqueta;
* **Coleta:** Para pedidos Americanas Entrega Direct é necessário solicitar a coleta dos pedidos.


# Validações

Para finalizar o processo de homologação e o sistema ser considerado apto a atuar com a API da Americanas, todos os passos solicitados abaixo e enviados via planilha devem estar corretos

### O que iremos homologar?

{% hint style="info" %}
A homologação básica/padrão engloba quatro pontos <mark style="color:red;">obrigatórios</mark>: **produtos**, **conexão via API**, **pedidos** e **etiquetas**.

No início da seção de cada recurso descrito nesta documentação existe uma página sinalizada como "integração" onde há o detalhamento das ações a serem realizadas para a homologação. O resumo das tarefas para homologação dos recursos obrigatórios pode ser consultado a seguir:&#x20;
{% endhint %}

**Produtos:**

{% content-ref url="/pages/-MFqz8UTXnpw1PwXg-uH" %}
[Produtos](/processo-de-homologacao/validacoes/produtos-validacao)
{% endcontent-ref %}

**Conexão via API (Rehub):**

{% content-ref url="/pages/OT8f7LdYLL5tfcDpo5tX" %}
[Conexão via API (Rehub)](/processo-de-homologacao/validacoes/conexao-via-api-rehub)
{% endcontent-ref %}

**Pedidos:**

{% content-ref url="/pages/-MFqz7CtNxf4pRHLADsR" %}
[Pedidos](/processo-de-homologacao/validacoes/pedidos-validacao)
{% endcontent-ref %}

**Etiqueta (PLP)**

{% content-ref url="/pages/-MFqz3qjKC-fOyZLHk2C" %}
[Etiqueta (PLP)](/processo-de-homologacao/validacoes/etiqueta)
{% endcontent-ref %}

Caso hajam correções necessárias, tais pontos serão informados e aguardaremos o retorno para nova validação.

{% hint style="danger" %}
Os pontos não homologados inicialmente e que foram desenvolvidos em um segundo momento deverão passar por validação antes de serem aplicados em ambiente de produção.&#x20;

Para a homologação de novos desenvolvimentos é necessário entrar em contato com o time de API (*<mark style="color:blue;"><srv.mktp.api@americanas.io></mark>*).
{% endhint %}


# Produtos

Serão solicitados produtos em diferentes cenários, para que a loja chegue em produção 100% preparada

Para a homologação deste recurso é imprescindível a criação de produtos que contenham características próximas à realidade, isto é, os SKUs criados para validação devem possuir título, descrição, imagens, dentre outras características, condizentes com aquelas que poderão ser preenchidas pelo lojista em ambiente de produção.&#x20;

### Quais as tarefas a serem executas para a homologação deste recurso?

No processo de homologação deverá ser criado um SKU para cada tarefa listada a seguir, isto é, nenhum SKU deverá ser repetido nas solicitações.

1. Criar produto **simples**;
2. Criar produto com uma estrutura de **variação** (podendo conter uma única variação ou mais);
3. Criar um produto simples ou variável com um **atributo "Teste"** que seja fora de nossa estrutura padrão e dentro de *specifications*;
4. Criar produto com mais de uma variação e com **variação de preço entre os skus**;
5. Criar produto com mais de uma variação contendo apenas o atributo **Tamanho**;
6. Criar produto com mais de uma variação contendo apenas o atributo **Voltagem**;
7. Criar produto com mais de uma variação contendo os atributos **Cor e Tamanho**;
8. Criar produto contendo o atributo **Crossdocking** (pode ser um produto simples ou variável);
9. Atualizar **estoque de produto simples** (enviar valores antes da atualização e após a atualização);
10. Atualizar **estoque de uma variação** (enviar valores antes da atualização e após a atualização);
11. Atualizar **preço de produto simples** (enviar valores antes da atualização e após a atualização);
12. Atualizar **preço de uma variação** (enviar valores antes da atualização e após a atualização);
13. Alterar apenas o status do produto para '**enabled**';
14. Alterar apenas o status do produto para '**disabled**';
15. **Deletar** um produto e manter excluído.

No caso dos produtos com variação, todas as *keys* do atributo devem estar inseridas no *array* **"*****variation\_attributes*****".** O *array* citado (*variation\_attributes*) será responsável por determinar os atributos capazes de diferenciar as variações do produto.

{% hint style="info" %}
**Todos os produtos devem conter imagem, dimensões e peso.**&#x20;

É possível verificar os pré-requisitos de um produto acessando a página [Integração: Produto](/produtos/integracao-produtos#pre-requisitos) desta documentação.
{% endhint %}


# Conexão via API (Rehub)

A rota rehub permite a conexão e desconexão de produtos diretamente pela API e iremos validar como o sistema está executando estas ações

Quando um SKU é criado ou tem suas características alteradas, só será anunciado e/ou atualizado no marketplace após passar pelo processo de conexão; da mesma forma, quando deseja-se descontinuar um item, é possível desconectá-lo do marketplace.

Ambos os processos mencionados (conexão e desconexão) requerem o acesso ao portal parceiro ou ao front da API para que sejam realizados, porém ao desenvolver a conexão via API através de nossa rota rehub é possível disponibilizar ao lojista a opção de realizar tais ações diretamente em seu sistema.&#x20;

### Quais as tarefas a serem executas para a homologação deste recurso?

1. Solicitar **credencias JWT** (Rehub);
2. **Conectar** produto no marketplace Americanas;
3. **Desconectar** produto no marketplace Americanas;
4. Consumir endpoint de **erros de conexão** (sync\_errors).

### O que será validado durante o processo de homologação?

A validação das tarefas descritas acima visa a constituição do body enviado para a API, assim como a correta utilização dos headers nas requisições.&#x20;

{% hint style="info" %}
**Devido a ausência de vínculo de nossas contas de teste com o marketplace, é esperado que os SKUs conectados apresentem alguma reprova**, porém a requisição deverá retornar com sucesso caso seja realizada de acordo com o descritivo presente em [Rehub - Ações de Produto](/rehub/rehub-acoes-de-produto).
{% endhint %}


# Pedidos

Neste ponto iremos homologar a criação, atualização e consumo de pedidos

Para esta homologação é necessário atentar-se ao correto preenchimento dos campos para a criação de pedidos, consumo de todos os status que em produção seriam provenientes do marketplace e correta atualização seguindo o ciclo de vida do pedido.

### Quais as tarefas a serem executas para a homologação deste recurso?

No processo de homologação deve ser informado um número de pedido para cada tarefa listada a seguir, isto é, nenhum pedido deverá ser repetido nas solicitações.

1. Criar pedido com um **produto simples** e quantidade **maior ou igual a 1**;
2. Criar pedido com um **produto que contenha variação** e quantidade **maior ou igual a 1**;
3. **Consumir todos os pedidos pela fila de integração** (`/queues`). Importante realizar um GET para consumir o pedido e um DELETE em seguida para retira-lo da fila;
4. Criar um pedido e atualizar seu status até **Faturado** fazendo o consumo e exclusão da fila a cada atualização;
5. Criar um pedido e atualizar seu status até **Faturado referente à Americanas Entrega Direct incluindo o XML**, fazendo o consumo e exclusão da fila a cada atualização;
6. Criar um pedido e atualizar seu status até **Enviado** com código de rastreio e chave da NFE fazendo o consumo e exclusão da fila a cada atualização;
7. Criar um pedido e atualizar seu status até **Entregue** com código de rastreio e chave da NFE fazendo o consumo e exclusão da fila a cada atualização;
8. Criar um pedido e atualizar seu status para **Cancelado** depois que ele for Aprovado (ou em algum status posterior) fazendo o consumo e exclusão da fila a cada atualização;
9. Criar um pedido e atualizar seu status para **Exceção de Entrega** depois que ele for Enviado fazendo o consumo e exclusão da fila a cada atualização);

### O que será validado durante o processo de homologação?

O fluxo do pedido deverá ser seguido conforme instruído em nossa documentação, não sendo possível encaminhar para validação entregas cujos status não respeitaram as orientações fornecidas.

Da mesma forma, não são aceitos pedidos que apresentaram retornos de erros operacionais - como utilização de status que não existem na conta, por exemplo - durante a continuidade do fluxo.

{% hint style="info" %}
**A criação e aprovação do pedido são passos solicitados apenas no processo de homologação, uma vez que em produção o pedido irá nascer no marketplace e cabe ao mesmo informar a aprovação do pagamento.**

Para detalhes sobre os processos que compreendem o fluxo do pedido, acesse o guia [Integração: Pedido](/pedidos/integracao-pedido#passos-para-integracao-de-pedidos).
{% endhint %}


# Etiqueta (PLP)

Serviço de impressão de etiqueta, caso o seller utilize a estratégia de frete Americanas Entrega

Durante o processo de homologação será obrigatória a validação da emissão da etiqueta (PLP), sendo necessário compreender os momentos em que as etiquetas devem estar disponíveis para as tratativas e quais as ações a serem realizadas para cada serviço de entrega.

### Quais as tarefas a serem executas para a homologação deste recurso?

Para a lista visualizada abaixo, durante o processo de homologação deverá ser sinalizado um ID para cada tarefa solicitada.

1. **Agrupar** PLP Americanas Entrega Direct com alguma etiqueta disponibilizada previamente na conta de teste;
2. **Desagrupar** PLP Americanas Entrega Direct com alguma etiqueta que esteja agrupada;
3. **Imprimir** PLP Direct com alguma etiqueta disponibilizada previamente na conta de teste;
4. **Confirmar Coleta** PLP Direct com alguma etiqueta disponibilizada previamente na conta de teste.

### O que será validado durante o processo de homologação?

Para a homologação do recurso de PLP será avaliada a execução das tarefas listadas acima, onde esperamos que sejam evidenciados IDs que não apresentaram retornos de erros operacionais e cujas requisições foram realizadas de acordo com a documentação. &#x20;

{% hint style="info" %}
**Todas as tarefas relacionadas às etiquetas serão realizadas a partir de pedidos previamente disponibilizados na conta de teste.**

É possível visualizar o padrão das etiquetas Americanas Entregas e os endpoints que serão utilizados para homologação da PLP através do guia [Etiqueta de Frete](/etiquetas-americanas-entrega/etiqueta-de-frete-direct#etiqueta-plp-na-conta-de-teste).
{% endhint %}


# Melhores Práticas

Importante verificar as melhores práticas para que o processo de homologação ocorra de forma correta e possamos minimizar os problemas em produção

{% content-ref url="/pages/-MGKm6ZvEtJYTQQA8\_8z" %}
[Produtos](/processo-de-homologacao/melhores-praticas-valid/pratica_produto)
{% endcontent-ref %}

{% content-ref url="/pages/-MGKmDmIV2SbDjqjewka" %}
[Pedidos](/processo-de-homologacao/melhores-praticas-valid/melhores_pedido)
{% endcontent-ref %}

{% content-ref url="/pages/-MGnYaMsG2p9hBo9mTyv" %}
[Etiqueta PLP](/processo-de-homologacao/melhores-praticas-valid/melhor-etiqueta)
{% endcontent-ref %}


# Produtos

Para que o teste de produtos ocorra de forma correta e os itens criados para a homologação não sejam recusados durante as validações de seu sistema/ERP/plataforma, é preciso seguir algumas orientações

### Quais as melhores práticas?

* Sempre utilizar o ***x-accountmanager-key*** fornecido no início do processo de homologação;
* O método <mark style="color:red;">POST</mark> deve ser utilizado exclusivamente para a <mark style="color:red;">criação</mark> do produto e qualquer <mark style="color:green;">alteração</mark> deve ser realizada através do <mark style="color:green;">PUT</mark>;
* Para a homologação, nas tarefas que solicitam a atualização de campos específicos, não serão aceitos os PUTs contendo a estrutura completa do item;
* A atualização de um produto simples é feita no endpoint PUT `/products/{sku}`;
* A atualização de uma variação deve ser feita em PUT `/variations/{sku}`;
* Todos os produtos criados devem conter a estrutura básica requerida (para mais detalhes, é possível acessar a seção [Validações: Produtos](/processo-de-homologacao/validacoes/produtos-validacao#o-que-sera-validado-durante-o-processo-de-homologacao));
* Para todas as tarefas que exigem criação de produtos serão analisados SKUs o mais próximo da realidade, portanto não serão aceitas evidências com informações genéricas (Exemplo: "Name": "Produto Teste", "Description": "Descrição Teste");
* As URLs das imagens devem estar com a hospedagem "HTTPS" aberta e não corrompida. O servidor não pode ter redirecionamentos, ou seja, o arquivo enviado precisa ser a própria imagem e não uma página intermediária como espelho;
* O peso do produto deve ser enviado em quilogramas (Kg);
* Dimensões devem ser enviadas em centímetros (cm);
* Em produtos com variação, deve ser enviado o qty (estoque) por variação;
* Deve ser respeitado o limite de requisições, caso contrário retornará erro <mark style="color:red;">429</mark>. Ao receber um retorno <mark style="color:red;">429</mark>, será necessário aguardar até o próximo minuto para realizar uma nova requisição;
* Caso receba um erro da família <mark style="color:red;">4XX</mark>, deve ser realizada uma nova tentativa e em paralelo é necessário tratar a mensagem de erro;
* Caso receba um erro da família <mark style="color:red;">5XX</mark>, deve ser realizada uma nova tentativa. Caso o erro persista, pedimos que entre em contato para que possamos analisar mais detalhadamente o retorno.


# Pedidos

Para que o teste de pedidos ocorra de forma correta e não retorne erros, solicitamos que verifique as melhores práticas e minimize problemas ou duvidas na integração

### Quais as melhores práticas?

* Todos os pedidos devem ser consumidos na fila de integração (`/queues/orders`);
* O **DELETE** do pedido na fila de integração deve ocorrer dentro de, no máximo, 5 minutos **após o GET**;
* Deve ser criado um pedido por solicitação para a validação;
* A criação do pedido e a sua atualização para aprovado podem ser realizadas através do Postman, Insomnia ou similares;
* Caso receba um erro da família <mark style="color:red;">4XX</mark>, deve ser realizada uma nova tentativa e em paralelo é necessário tratar a mensagem de erro;
* Caso receba um erro da família <mark style="color:red;">5XX</mark>, deve ser realizada uma nova tentativa. Caso o erro persista, pedimos que entre em contato para que possamos analisar mais detalhadamente o retorno.


# Etiqueta PLP

Para que o teste de etiquetas ocorra de forma correta e não retorne erros, solicitamos que verifique as melhores práticas e minimize problemas ou duvidas na integração

### Quais as melhores práticas?

* Necessário criar um pedido teste com o campo **remote\_code**, que trata-se do número do pedido informado na aba de Postagem, coluna pedido;
* O agrupamento deve ocorrer após o pedido ser atualizado para **faturado**;
* Para imprimir na impressora térmica, o header *accept* deve estar com o valor *application/json* e será necessário montar o layout da etiqueta;
* Será necessário **solicitar a coleta** para todos os pedidos gerados para expedição pelo serviço Americanas Entrega Direct;
* Caso receba um erro da família <mark style="color:red;">4XX</mark>, deve ser realizada uma nova tentativa e em paralelo é necessário tratar a mensagem de erro;
* A API é apenas um proxy para o serviço de etiquetas, sendo assim, ao receber um erro da família <mark style="color:red;">5XX</mark>, deve ser realizada uma nova tentativa. Caso o erro persista, pedimos que entre em contato para que possamos analisar mais detalhadamente o retorno.


# Perguntas Frequentes

Esta seção traz as perguntas mais frequentes recebidas pelo time de suporte a API

### Processo de Homologação

<details>

<summary>Como é o processo de homologação?</summary>

Após solicitar a homologação de seu sistema, serão liberadas pelo time de suporte a integração as credenciais para uma conta de teste e a lista de tarefas (*cheklist*) que devem ser executadas para a validação dos processos desenvolvidos.

Uma vez que as tarefas forem executadas, as evidências para validação devem ser encaminhadas através de um chamado para o <srv.mktp.api@americanas.io>.&#x20;

O time de API irá validar a estrutura das requisições recebidas e qualquer ponto em não conformidade será sinalizado para a correção. Após todos os pontos serem validados e apresentarem as estruturas necessárias para atuação com a API da Americanas, o sistema desenvolvido será liberado para utilização em ambiente de produção.

</details>

<details>

<summary>O que é e como obtenho o header <em>x-accountmanager-key</em>?</summary>

O header *x-accountmanager-key* é o código identificador de seu sistema, ou seja, ele é o código que permite-nos validar qual plataforma está executando requisições para a API da Americanas.

Esse identificador é fornecido exclusivamente para parceiros que solicitam o processo de [homologação](/processo-de-homologacao) e deve ser utilizado em todas as requisições via API.&#x20;

</details>

<details>

<summary>Não sou loja e nem plataforma, posso obter as credenciais?</summary>

Não.&#x20;

Somente aqueles que irão desenvolver uma solução para integrar junto a Americanas Marketplace receberão as credenciais mediante a solicitação.

Não são liberadas credenciais apenas para testes, projetos individuais ou alunos/professores acadêmicos.

</details>

<details>

<summary>Quais são os passos para a homologação?</summary>

O processo de homologação com a API da Americanas é simples e consiste na validação das requisições e estrutura dos dados enviados nas tarefas solicitadas em nosso *checklist*, encaminhado junto às credenciais da conta de teste (para maiores informações, acesse a guia [Processo de Homologação](/processo-de-homologacao) desta documentação).

De forma mais detalhada, os passos para a homologação de seu sistema consistem em:

1. **Definição do perfil para homologação:** É importante compreender qual o perfil do sistema a ser homologado (os perfis podem ser consultados em nossa guia [Perfil para Homologação](/processo-de-homologacao/perfil-para-homologacao));
2. **Criação da conta de teste:** Após receber o seu acionamento para início do processo de homologação, nossos times irão criar um ambiente de desenvolvimento para a plataforma/ERP. As credenciais para acesso a conta de teste serão informadas via chamado junto às tarefas que deverão ser executadas;
3. **Execução de testes e preenchimento do&#x20;*****checklist*****:** Em posse das credenciais da conta de teste, o responsável pelo sistema deverá validar o nosso *checklist*, que nada mais é do que a lista de tarefas que precisam ser concluídas para que possamos validar o envio de informações para a API;
4. **Validação do desenvolvimento:** Após a execução e envio das tarefas solicitadas, o time de API da Americanas irá validar as requisições encaminhadas pelo seu sistema.

</details>

<details>

<summary>Preciso solicitar uma conta de teste para cada recurso que será homologado?</summary>

Não é necessário solicitar uma conta de teste para cada recurso a ser homologado.&#x20;

Ao solicitar a homologação de seu sistema será preciso que realize o processo obrigatório, que visa o desenvolvimento e a validação dos recursos básicos da API (produtos, conexão via rehub, pedidos e etiquetas).

No final da homologação básica, a conta de teste fornecida será mantida ativa para que, caso deseje, realize o desenvolvimento e validação (homologação) dos demais [recursos](/recursos) disponibilizados pela API.

Um ponto importante é que ao desenvolver um novo recurso é imprescindível que entre em contato com o time de API da Americanas para que a homologação seja validada. Este contato se dá através do e-mail <srv.mktp.api@americanas.io>.

</details>

<details>

<summary>Quero trabalhar somente atualizando estoque, preciso passar por toda a homologação?</summary>

Mesmo que a solução a ser desenvolvida deseje operar somente atualizando estoque, preço, consultando pedidos, ou seja, utilizar somente uma das funcionalidades disponíveis, ela terá que obrigatoriamente passar por todo o processo de homologação.

Hoje as todas as funcionalidades de produto, pedidos, etiquetas e Rehub são obrigatórios para a plataforma ser homologada conosco.

</details>

### Produtos

<details>

<summary>Status 401 ou 403 - não autenticado/não autorizado - na criação/atualização de produtos</summary>

Um cenário que pode gerar impacto negativo para a integração ocorre quando o *seller* realiza a inativação de usuários no front da API, porém não atualiza esta informação na plataforma/ERP. Em casos como este é comum as tentativas de envio de requisições para a API – notadas principalmente nos endpoints relacionados aos produtos – retornarem status <mark style="color:red;">401</mark> (não autenticado) ou <mark style="color:red;">403</mark> (não autorizado).

Para correção, é necessário entrar em contato com o *seller* para validação das credenciais da conta na API, principalmente os e-mails <mark style="color:green;">ativos</mark>.

Caso as credenciais tenham sido validadas e ainda constem divergências, o time de API deverá ser acionado através de chamado para o e-mail <srv.mktp.api@americanas.io>.

</details>

<details>

<summary>Estamos enviando atualização de preço/estoque, mas no Marketplace não atualiza. O que fazer?</summary>

Aqui estão 3 dicas para solução dessa questão.

1° - Valide se no body da requisição os atributos de preço e/ou estoque estão sendo passados conforme solicitamos (dentro da raiz do 'product'/'variation');

2° - Verifique se o seu produto é simples, ou se possui variações. Para isso, é necessário [realizar um GET no produto](/produtos/consulta-produto) e validar se no array 'variations' possui algum SKU. Não existindo, trata-se de produto simples, já se existir, trata-se de produto variável;

3° - Utilize o endpoint correto para cada tipo de produto. Se o [produto for simples, utilize o '/products'](/produtos/atualizacao-produto/produto-simples), porém [se for variável, utilize o '/variations'](/produtos/atualizacao-produto/produto-variavel-1).

</details>

### Rehub

<details>

<summary>Será retornado algum erro ao tentar excluir um produto ainda conectado ao marketplace?</summary>

Sim, por padrão a API retorna erros para a exclusão de itens que ainda estão [conectados](/rehub/rehub-acoes-de-produto) ao marketplace Americanas.

Caso haja uma tentativa de excluir um produto ainda conectado será retornado o status <mark style="color:red;">422</mark> e a mensagem "*Produto está conectado. Remova todas as conexões e tente novamente*".

</details>

<details>

<summary>Fiz o processo de conexão via Rehub porém o produto não foi criado no Marketplace, o que fazer?</summary>

Neste caso, é muito provável que o produto possui alguma pendência cadastral que impediu a sua criação. Alguns motivos para o produto não ser criado:

* Falta de [atributos obrigatórios](/produtos/integracao-produtos#pre-requisitos-para-a-integracao-de-produtos-em-ambiente-de-teste-e-producao);
* Falta de marca;
* Falta de categoria;

Para saber se houve algum impedimento, é necessário fazer a consulta da carga:<br>

<https://desenvolvedores.skyhub.com.br/rehub/resultado-das-acoes-de-produto#consultando-o-resultado-da-acao-pelo-id-da-carga>

</details>

### Pedidos

<details>

<summary>Status 403 ao tentar criar um pedido</summary>

Como citado em nossa seção de dúvidas sobre o recurso de [Produtos](#produtos), o status <mark style="color:red;">403</mark> é retornado em ações <mark style="color:red;">não autorizadas</mark>.

Em relação a criação de pedidos, o status <mark style="color:red;">403</mark> é comumente visto em casos em que o parceiro realiza tentativas de criar um pedido em uma **conta de produção**.

Na seção de [Criação e Aprovação de Pedido Teste](/pedidos/criacao-de-pedido-teste) mencionamos que tanto **criação** quanto **aprovação** de pedidos são ações **exclusivas para as contas de teste**, sendo assim, uma conta de produção não permitirá tais tratativas.&#x20;

</details>

<details>

<summary>Fluxo de status dos pedidos</summary>

Para que o pedido seja atualizado corretamente até o ponto de entregue, é necessário que o fluxo de atualização de status seja respeitado. Abaixo o fluxo:

* Pagamento pendente
* Pagamento aprovado
* Pedido faturado
* Pedido enviado
* Pedido entregue

Caso algum status seja pulado, a API retornará **erro na transição de status**.&#x20;

Exemplo:

Se uma requisição colocando o pedido para enviado ocorrer primeiro que uma requisição de faturado, ocorrerá o erro citado acima quando a plataforma tentar atualizar a nota fiscal do produto, consequentemente o pedido não terá seu fluxo finalizado no Marketplace.

</details>

<details>

<summary>Estou tomando o erro "TRANSIÇÃO INVÁLIDA: STATUS -> STATUS". Qual o motivo?</summary>

O erro de transição inválida ocorre quando se tenta atualizar um pedido que já está atualizado para aquele status da tentativa, ou quando se tentar regredir um status.\
\
Por exemplo, um pedido já faturado que a requisição tenta novamente faturar o pedido.\
\
Outro exemplo, um pedido já enviado que a requisição tenta voltar para o status de faturado.

</details>

### Etiquetas

<details>

<summary>Serão emitidas etiquetas para os pedidos gerados em minha conta de teste?</summary>

Para o ambiente de teste as etiquetas são disponibilizadas **previamente** com dados fixos, desta forma, os pedidos criados em uma conta de teste <mark style="color:red;">não</mark> possuirão etiquetas com seus dados.

Para realizar todo o fluxo de etiquetas em uma conta de teste - desde a criação do produto até a impressão da etiqueta e solicitação da coleta do pedido - é possível seguir as orientações fornecidas em nosso guia [Etiquetas na conta de teste](https://desenvolvedores.skyhub.com.br/etiquetas-americanas-entrega/homologacao-para-impressao-de-etiquetas-americanas-entregas#etiquetas-na-conta-de-teste) da seção [Integração Etiqueta](https://desenvolvedores.skyhub.com.br/etiquetas-americanas-entrega/integracao-etiqueta), onde disponibilizamos os passos para realizar o vínculo de um pedido criado em ambiente de teste com uma etiqueta previamente gerada.

</details>

### Fulfillment

<details>

<summary>É possível consumir os pedidos Fulfillment separadamente?</summary>

Todos os pedidos gerados no marketplace e disponibilizados pela API serão consumidos sem distinção através da [*/queues/orders*](https://desenvolvedores.skyhub.com.br/pedidos/consumo-de-pedidos-queues), isto é, uma vez que o parceiro (*seller*) possui o serviço Fulfillment, todos os pedidos desta modalidade serão disponibilizados junto às demais entregas criadas para a loja.

Desta forma, cabe à plataforma/ERP a identificação do tipo do pedido. Caso hajam dúvidas, é possível consultar a guia [Identificando Pedido](https://desenvolvedores.skyhub.com.br/americanas-fulfillment/identificando-pedido) de nossa seção **Fulfillment**.&#x20;

</details>

### Pós-migração

<details>

<summary>Como o lojista pode obter as credenciais para preencher em nossa plataforma?</summary>

O lojista deve entrar no novo portal, realizar login e ir até o Menu **Integrações > Credenciais API.**

</details>

<details>

<summary>A marca do lojista não aparece na listagem, como criar o produto?</summary>

É possível o lojista solicitar a inclusão de determinada marca abrindo chamado diretamente no portal do lojista.\
\
Outra opção que pode ser realizada até se ter uma resposta do time de atendimento, é enviar o **id da marca** referente a opção "**Não disponível**" que encontra-se na listagem.

</details>

<details>

<summary>Após a migração, alguns produtos não estão no novo portal, como corrigir?</summary>

Caso algum produto que existia no antigo portal não esteja no novo após a migração, significa que ele não foi migrado por conta de alguma pendência cadastral.\
\
Nesta situação, se faz necessário [**reenviar os produtos para a Skyhub**](/produtos/criacao-de-produto) já respeitando as novas exigências.

</details>

<details>

<summary>Criei os produtos mas eles não aparecem no portal, o que fazer?</summary>

Após a migração realizada em **Março/2025**, somente produtos enviados de acordo com o que pedimos em [**comunicado enviado aos parceiros**](/comunicados/comunicados-2025/criacao-e-atualizacao-de-produtos-e-variacoes-no-marketplace), serão de fato criados.&#x20;

\
Por isso é importante que a plataforma faça a revisão do que está sendo enviado no body, como o id da marca, id da categoria e os atributos de categoria.

Dito isso, são dois processos para habilitar um novo produto a venda no Marketplace:\
\
1° - Criação do produto (POST em [**/products**](/produtos/criacao-de-produto));

2° - Conexão do produto via API, utilizando a [**ação de conectar do Rehub**](/rehub/rehub-acoes-de-produto).

A tendência é de que se o produto estiver todo correto, será criado no portal do lojista. Caso não seja, se faz necessário consultar se no resultado da carga algum erro ocorreu:\
\
<https://desenvolvedores.skyhub.com.br/rehub/resultado-das-acoes-de-produto#consultando-o-resultado-da-acao-pelo-id-da-carga>\
\
Somente a criação do produto via API não faz com que ele se torne visível no portal do lojista, isto ocorre pois novos produtos ficam em uma base distinta aguardando esta ação de conexão pelo lojista.

**Se você é um lojista e chegou a esse artigo, por favor contate a sua plataforma/ERP e repasse as informações deste material para obter auxílio.**

</details>

<details>

<summary>O envio do preço ocorre com sucesso (204), porém não é atualizado no Marketplace, o que fazer?</summary>

A SkyHub pode retornar sucesso ao receber a atualização de preços, porém pode ocorrer de no momento do envio ao Marketplace ser rejeitado por alguma pendência, onde a mais é comum trata-se de redução maior que 50%.\
\
Para consultar se algum produto teve impedimento na atualização de preço, é possível realizar um GET no endpoint abaixo:\
\
<https://api.skyhub.com.br/sync_errors/products?error_category_code=update_b2w_price>

</details>


# > Integração Produto

Nesta seção mostraremos a trilha para realização da integração de produtos, composta da criação, atualização e exclusão de itens, além de recursos adicionais relacionados

{% hint style="danger" %}
**Todo recurso desenvolvido deve ser** [**homologado**](https://desenvolvedores.skyhub.com.br/processo-de-homologacao) **pelo time responsável pela API da Americanas.**
{% endhint %}

## Passos para integração de produtos

Os passos para integração do recurso de produtos são:

1. Criação de itens simples e variáveis;
2. Categorização conforme regras criadas na Americanas Marketplace;
3. Correta inclusão de atributos que não estão definidos em nossa estrutura padrão;
4. Criação de produtos variáveis contendo atributos específicos, como cor, tamanho e voltagem;
5. Atualização de produtos simples e variáveis;
6. Exclusão de SKU.

{% hint style="info" %}
Todas as tarefas necessárias para a homologação do recurso de produtos podem ser consultadas na guia Validações > [Produtos](https://desenvolvedores.skyhub.com.br/processo-de-homologacao/validacoes/produtos-validacao) na seção Processo de Homologação.
{% endhint %}

### O que será validado durante o processo de homologação?

O processo de homologação de um recurso tem como objetivo garantir que a plataforma/ERP encontra-se apta para a integração com a API da Americanas. Para este processo serão validados os conteúdos das requisições (*method*, *headers* e *body*), assim como a execução de ações obrigatórias para a integração.

Para o recurso de produtos as validações compreendem os seguintes aspectos:&#x20;

* [Criação](/produtos/criacao-de-produto): Para a homologação será necessário criar produtos simples e variáveis;
* [Atualização](/produtos/atualizacao-produto): Serão solicitadas atualizações de determinados campos tanto para SKUs simples quanto para variações;
* [Exclusão](/produtos/excluir-produto): Para a homologação será validada a exclusão de um item, onde o mesmo deverá se manter deletado e o código SKU não poderá ser reaproveitado.

## Visão geral dos tipos de produtos para e-commerce

Para que um produto seja anunciado em sites de e-commerce é necessário conhecer alguns aspectos para escolher a melhor estratégia de anúncio.

De um modo geral existem dois tipos de produtos, simples e variável, conforme a seguir:

1. **Produto simples**: É aquele composto de um SKU simples sem variações do mesmo item, por exemplo: livros, DVDs e outros;
2. **Produto variável**: É aquele composto por dois ou mais SKU's, possuindo um atributo diferenciador como voltagem, tamanho, sabor e outros para distinguir as variações do mesmo produto. Atributos de variação são definidos pela Americanas Marketplace, conforme podemos verificar em [Consultar Atributos por Categoria](/produtos/categorizacao/consultar-atributos-por-categoria).

{% hint style="info" %}
**SKU** é a unidade de estoque vendida, a sigla significa ***Stock Keeping Unit**,* sendo na prática o ID único de cada produto.
{% endhint %}

### Pré-requisitos para produtos

#### Pré-requisitos para a integração de produtos em ambiente de teste e produção

Seguir um padrão no cadastro de produtos é uma prática muito importante, então listamos alguns desses requisitos para uma integração bem sucedida com o marketplace.

1. **Campos obrigatórios para o envio de itens para a API:**\
   Os seguintes campos são obrigatórios na API e o não envio desses atributos implicará em retorno de erro: \
   **-** SKU;\
   \- Título (name);\
   \- Descrição (description);\
   \- Dimensões (height, width e length);\
   \- Peso (weight).\
   \
   É imprescindível a observância dos demais requisitos abaixo para sucesso na integração com o marketplace:
2. **Utilize um padrão para a criação dos códigos SKUs**:\
   \- Utilize uma sequência numérica ou alfanumérica;\
   \- Certifique-se que o SKU não possua espaços em branco, normalmente oriundos de cópia direta de editores como Excel e outros;\
   \- <mark style="color:red;">Não utilize caracteres especiais</mark> como barra (/), asterisco (\*), vírgula (,), ponto (.), porcentagem (%) e diversos outros, como por exemplo ($, #, (, ), @, !, ¨) e **etc**. Não podemos mapear todas as tratativas realizadas pelo marketplace ao receber caracteres especiais para o SKU, em alguns casos é possível que haja a troca do SKU por um outro registro e, no pior dos casos, podem haver recusas para a integração do item;\
   \- <mark style="color:red;">**Utilize sempre SKUs exclusivos em todos os produtos:**</mark> <mark style="color:red;">Nunca repita um SKU em outro produto, mesmo que seja de produtos excluídos e mesmo entre produtos simples e variáveis</mark>.<br>
3. **Informe sempre o peso do produto:**\
   \- Utilize sempre a unidade de medida em **quilograma (Kg)**, por exemplo, 3.0 para três quilos;<br>
4. **Informe sempre as dimensões do produto:**\
   \- Utilize sempre a unidade de medida em **centímetros (Cm)**, por exemplo, 20.0 para vinte centímetros.<br>
5. **Informe ao menos uma imagem por produto:**\
   \- Um produto sem imagem não pode ser anunciado, portanto, é necessário que seja enviada ao menos uma imagem no produto.

   &#x20;

### Pré-requisitos para a homologação

Serão desconsiderados, principalmente, os SKUs que apresentaram erros durante o envio da requisição para a API - como, por exemplo, retorno de erro por ausência de um campo obrigatório - ou que apresentarem mais de um método POST, que deve ser utilizado exclusivamente para a criação.&#x20;

Para a homologação com a API da Americanas também serão validados todos os campos que constituem a estrutura de um produto, sendo:

* **SKU** (`sku`): Código único responsável pela identificação do produto e por este motivo não pode ser repetido em outro item;
* **Nome** (`name`): Breve título capaz de refletir de forma objetiva a proposta do item (por exemplo: Camiseta branca);
* **Descrição** (`description`): A descrição deve conter mais caracteres que o título definido e precisa trazer o detalhamento do produto criado. Neste campo não são aceitas tags HTML (com exceção de \<p> e \<br> devidamente abertas e fechadas) e expressão regular;
* **Status** (`status`): Campo que irá definir se um produto está ativo (*enabled*) ou inativo (*disabled*) para a venda;
* **Quantidade** (`qty`): Número inteiro que representa o estoque do item;
* **Preço** (`price`): Valor de venda do produto;&#x20;
* **Preço promocional** (`promotional_price`): Em ambiente de produção, caso o produto não possua ou deseje não trabalhar com **"promotional\_price"**, ele deve ser nulo. Para a homologação, o preenchimento do campo é validado;
* **Crossdocking** ( crossdocking ): Define o tempo de expedição do produto;
* **Custo** (`cost`): Custo do produto para o lojista;
* **Peso** (`weight`): Deverá ser considerado com quilograma (kg) e informado como inteiro, por exemplo, 3.0 será considerado três quilos;
* **Altura** (`height`): Todas as dimensões deverão ser considerados em centímetro (cm), por exemplo, 20.0 será considerado como 20 centímetros;
* **Largura** (`width`): Todas as dimensões deverão ser considerados em centímetro (cm);
* **Comprimento** (`length`): Todas as dimensões deverão ser considerados em centímetro (cm);
* **Marca** (`brand`): Será validado se o campo foi preenchido como *string*;
* **EAN** (`ean`): Será validado se o campo foi preenchido como *string* contendo de 13 a 14 números;
* **NBM** (`nbm`): Para a homologação será validado se o campo foi preenchido como *string* contendo de 8 a 10 caracteres;
* **Imagens** (`images`): Todas as imagens encaminhadas para a API devem estar no formato *https* e o servidor não pode ter redirecionamentos;
* **Especificações** (`specifications`): Responsável por receber todas as informações adicionais para um produto, como voltagem, tamanho, cor, entre outros atributos disponíveis.

Navegue pelas guias abaixo e acompanhe o detalhamento de cada ação de produto:

{% content-ref url="/pages/-MG4Gis5UfYeVHsMwz1j" %}
[Criação de Produto](/produtos/criacao-de-produto)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4KKKK7iO8kF9S7J30" %}
[Atualização de Produto](/produtos/atualizacao-produto)
{% endcontent-ref %}

{% content-ref url="/pages/-MGPs\_Se8fX9P-Bng5q3" %}
[Consulta de Produto](/produtos/consulta-produto)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4JxT8yc3BFw4grZQU" %}
[Exclusão de Produto](/produtos/excluir-produto)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4Glj0PPvakqUVOzYu" %}
[Outros Recursos de Produtos](/produtos/outros-recursos-de-produtos)
{% endcontent-ref %}


# Categorização

Agora para a conexão de itens se faz necessário o envio da categorização no corpo da requisição do produto. Nesta seção, traremos informações relacionadas a como você deverá categorizar os produtos.

A obrigatoriedade de preenchimento ou não ocorrerá de acordo com as configurações das regras nas Americanas. O mesmo ocorrerá para as <mark style="color:purple;">Marcas</mark>.\
\
Para isso, será necessário antes de conectar os produtos, **consultar a lista de categorias**, **consultar as marcas** e também realizar a **consulta por atributos de categorias**. Preparamos um seção para cada consulta:

{% content-ref url="/pages/kp4v2QwIFUATPgAI4Hc2" %}
[Consultar Categorias](/produtos/categorizacao/consultar-categorias)
{% endcontent-ref %}

{% content-ref url="/pages/EoPEomzLALPmd94hLzE2" %}
[Consultar atributos por categoria](/produtos/categorizacao/consultar-atributos-por-categoria)
{% endcontent-ref %}

#### Você pode também saber mais sobre Marcas:

{% content-ref url="/pages/tBFjsMyZAgV9oaM1N5qo" %}
[Consultar Marcas](/produtos/consultar-marcas)
{% endcontent-ref %}


# Consultar Categorias

Nesta seção indicaremos como realizar a consulta na lista de categorias da Americanas.

Ao consultar a lista de Categorias, será possível consultar o ID de uma determinada e assim incluí-lo no JSON de produtos, também obrigatoriedade de atributos nelas.

## GET - Consulta lista de categorias

```
https://api.skyhub.com.br/categories
```

{% hint style="info" %}
A consulta trará 5 categorias, mas é possível utilizar o **limit** para trazer mais conforme necessidade (Máx. 100). Também é possível aplicar a paginação através do parâmetro ***offset**.*
{% endhint %}

#### Request headers:

<table><thead><tr><th>Key</th><th width="398">Value</th></tr></thead><tbody><tr><td>X-User-Email</td><td>email_de_usuario</td></tr><tr><td>X-Api-Key</td><td>token_de_integracao de sua conta SkyHub</td></tr><tr><td>X-Accountmanager-key</td><td>token_account único de cada Plataforma/ERP</td></tr><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table>

#### **Estrutura de resposta:**

```
{
  "total": 0,
  "limit": 0,
  "offset": "0",
  "sort": "string",
  "values": [
    {
      "id": "string",
      "tenant": "string",
      "operator": "string",
      "createDate": "1970-01-01T00:00:00.000000",
      "lastUpdate": "1970-01-01T00:00:00.000000",
      "channel": "string",
      "eanRequired": "boolean",
      "account": null,
      "lastEvent": null,
      "categoryData": {
        "tag": "string",
        "id": "string",
        "name": "string",
        "id1": "string",
        "name1": "string"
      },
      "attributes": [
        {
          "marketplace": "string",
          "name": "string",
          "nameId": "string",
          "value": "string",
          "valueId": "string",
          "group": "string",
          "grupId": "string",
          "type": "string",
          "typeId": "string",
          "descriptionValue": "string",
          "toSKU": "boolean",
          "variant": "boolean",
          "binary": "boolean",
          "active": "boolean",
          "required": "boolean"
        }
      ]
    }
  ]
}

```

#### **Example request:**

```
curl --location -g --request GET 'https://api.skyhub.com.br/categories?limit=100&offset=2' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: Haverá um response body com a lista de categorias:
{% endhint %}

<pre><code>{
  "total": 1000,
  "limit": 10,
  "offset": 2,
  "values": [
    {
      "tenant": "TALD00776574000660",
      "operator": "TALD00776574000660",
      "account": null,
      "createDate": "2025-01-01T08:42:00.627000",
      "lastUpdate": "2025-01-01T08:42:41.454000",
      "lastEvent": null,
      "id": "3",
      "channel": "TALD00776574000660",
      "eanRequired": false,
      "categoryData": {
        "tag": "x-x-x",
        "id": "x",
        "name": "Nome",
        "id1": "x",
        "name1": "Nome 1",
        "id2": "x",
        "name2": "Nome 2",
        "id3": "x",
        "name3": "Nome 3"
      },
      "attributes": [
        {
          "marketplace": "TALD00776574000660",
          "name": "x",
          "nameId": "x",
          "value": "",
          "valueId": "",
          "group": "Grupo",
          "grupId": "x",
          "type": "Texto",
          "typeId": "1",
          "descriptionValue": "",
          "toSKU": false,
          "variant": false,
          "binary": false,
          "active": true,
<strong>          "required": false
</strong>        }
      ]
    }
  ]
}

</code></pre>

## Filtros de consulta

### Consultar categoria individualmente

Já tendo o **id** de uma categoria, é possível também consultá-la de forma individual conforme abaixo:

```
https://api.skyhub.com.br/categories/{id}
```

#### Request headers:

<table><thead><tr><th width="339.6666259765625">key</th><th width="506.3333740234375">value</th></tr></thead><tbody><tr><td>X-User-Email</td><td>email_de_usuario</td></tr><tr><td>X-Api-Key</td><td>token_de_integracao de sua conta SkyHub</td></tr><tr><td>X-Accountmanager-key</td><td>token_account único de cada Plataforma/ERP</td></tr><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table>

#### Estrutura de resposta:

```
{
  "id": "string",
  "tenant": "string",
  "operator": "string",
  "createDate": "1970-01-01T00:00:00.000000",
  "lastUpdate": "1970-01-01T00:00:00.000000",
  "channel": "string",
  "eanRequired": "boolean",
  "account": null,
  "lastEvent": null,
  "categoryData": {
    "tag": "string",
    "id": "string",
    "name": "string",
    "id1": "string",
    "name1": "string"
  },
  "attributesData": [
    {
      "marketplace": "string",
      "name": "string",
      "nameId": "string",
      "value": "string",
      "valueId": "string",
      "group": "string",
      "grupId": "string",
      "type": "string",
      "typeId": "string",
      "descriptionValue": "string",
      "toSKU": "boolean",
      "variant": "boolean",
      "binary": "boolean",
      "active": "boolean",
      "required": "boolean"
    }
  ]
}
```

### Como consultar pelo nome

É possível realizar buscas por nome de uma determinada categoria.

{% hint style="info" %}
A busca retornará todas as categorias que possuírem a sequência de caracteres declarada no filtro.
{% endhint %}

Para realizar o filtro pelo nome da categoria, deverá ser informada a query **?categoryName=** no endpoint /categories, referenciando a sequência de caracteres a ser consultada, conforme exemplo a seguir:

```
https://api.skyhub.com.br/categories?categoryName={nome_da_categoria}
```

#### Example request:

```
curl --location -g --request GET 'https://api.skyhub.com.br/categories?categoryName=limpeza' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 \[Success] - OK: No retorno da consulta acima, retornará todas as categorias que possuírem a sequência 'limpeza' como vemos a seguir:
{% endhint %}

```
{
  "total": 74,
  "limit": 1,
  "offset": 0,
  "values": [
    {
      "tenant": "TALD00776574000660",
      "operator": "TALD00776574000660",
      "account": null,
      "createDate": "2025-06-24T20:11:13.589000",
      "lastUpdate": "2025-06-24T20:12:24.258000",
      "lastEvent": null,
      "id": "106",
      "channel": "TALD00776574000660",
      "eanRequired": false,
      "categoryData": {
        "tag": "1-86-106",
        "id": "106",
        "name": "Equipamentos e acessórios para limpeza e coleta seletiva",
        "id1": "1",
        "name1": "Agro, indústria e comércio",
        "id2": "86",
        "name2": "Equipamentos de segurança e sinalização",
        "id3": "106",
        "name3": "Equipamentos e acessórios para limpeza e coleta seletiva"
      },
      "attributes": [
        {
          "marketplace": "TALD00776574000660",
          "name": "Capacidade em volume",
          "nameId": "473",
          "value": "",
          "valueId": "",
          "group": "Especificações - Equipamentos e acessórios para limpeza e coleta seletiva",
          "grupId": "112",
          "type": "Texto",
          "typeId": "1",
          "descriptionValue": "",
          "toSKU": false,
          "variant": false,
          "binary": false,
          "active": true,
          "required": false
        }
    }
      ]
    }
  ]
}
```

#### **Utilizando o limit e o offset**

Por padrão, a consulta acima trará somente os primeiros 5 resultados (limit=5), porém pode ser passado na consulta um valor de no máximo 100, trazendo assim essa quantidade de categorias na busca.

```
https://api.skyhub.com.br/categories?categoryName=limpeza&limit=100
```

Caso ainda tenha uma próxima página, deve-se utilizar o parâmetro offset. Por exemplo, se na requisição houvesse ainda uma segunda página e desejasse passar pra ela, a consulta abaixo deve ser realizada:

```
https://api.skyhub.com.br/categories?categoryName=limpeza&limit=10&offset=10
```

<br>


# Consultar atributos por categoria

Nesta seção indicaremos como realizar a consulta nos atributos de categorias da Americanas.

Consultando os atributos por categorias, será possível identificar aqueles que serão obrigatórios a presença no JSON do produto.

## Como funciona?

Haverá atributos com os seguintes tipos:

* <mark style="color:green;">Text</mark>&#x20;
* <mark style="color:green;">Multi-Line Text</mark>&#x20;
* <mark style="color:green;">Number</mark>&#x20;
* <mark style="color:green;">Indexed Text</mark>&#x20;
* <mark style="color:green;">Indexed Multi-Line Text</mark>
* <mark style="color:red;">Combo</mark>&#x20;
* <mark style="color:red;">Radio</mark>&#x20;
* <mark style="color:red;">Checkbox</mark>&#x20;

Atributos em verde são conhecidos como "atributos de preenchimento livre", já os atributos em vermelho vão precisar seguir um padrão já determinado pela Americanas.

Isso significa que ao criar um produto na Americanas, será necessário identificar o tipo do atributo. Sendo um atributo de preenchimento livre, haverá a possibilidade de ser enviado um texto livre no atributo, já os atributos "combo, radio e checkbox", serão preenchidos com valores já pré-determinados pelo Marketplace.

Detalharemos mais na documentação de [**Criação de Produtos**](/produtos/criacao-de-produto).<br>

## GET - Consultar atributos por Categoria

```
https://api.skyhub.com.br/categories/{id}/attributes
```

{% hint style="info" %}
Atributos ajudam na filtragem e visibilidade do produto no e-commerce, além de serem essenciais para a integração com o marketplace. Porém, não serão todos os atributos de categorias obrigatórios, será necessário atentar-se ao valor do atributo **required**.
{% endhint %}

{% hint style="warning" %}
A consulta de atributos por categoria retornará um campo chamado "**toSKU**", onde este define se o atributo deve ser enviado no produto ***PAI*** ou na sua ***variação***.\
\
Caso o "**toSKU**" seja <mark style="color:orange;">false</mark>, o atributo deve ser enviado nas especificações do produto pai. Caso <mark style="color:green;">true</mark>, deverá ser enviado nas especificações do produto filho.\
\
Porém, se por acaso o "**toSKU**" seja <mark style="color:green;">true</mark> e o produto se tratar de um produto simples, o atributo deverá ser enviado no "**specifications"** do produto normalmente.
{% endhint %}

#### Request headers:

<table><thead><tr><th>Key</th><th width="398">Value</th></tr></thead><tbody><tr><td>X-User-Email</td><td>email_de_usuario</td></tr><tr><td>X-Api-Key</td><td>token_de_integracao de sua conta SkyHub</td></tr><tr><td>X-Accountmanager-key</td><td>token_account único de cada Plataforma/ERP</td></tr><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table>

#### **Estrutura de resposta:**

```
[
  {
    "marketplace": "string",
    "id": "string", // id do atributo
    "name": "string",
    "group": "string",
    "groupId": "string",
    "type": "string", // tipo do atributo
    "typeId": "string", 
    "toSKU": "boolean", // define se o atributo deve ser enviado no PAI ou Variação
    "variant": "boolean",
    "binary": "boolean",
    "active": "boolean",
    "required": "boolean",
    "valueData": []
  }
]
```

#### **Example request:**

```
curl --location -g --request GET 'https://api.skyhub.com.br/categories/55/attributes' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: Haverá um response body com os atributos da categoria:
{% endhint %}

```
// Atributo de preenchimento Livre

[
  {
    "marketplace": "TALD00776574000660",
    "id": "22066",
    "name": "Cor",
    "group": "Especificações - Caixas e embalagens para delivery",
    "groupId": "15401",
    "type": "Texto",
    "typeId": "1",
    "toSKU": false,
    "variant": false,
    "binary": false,
    "active": true,
    "required": false,
    "valueData": []
  }
]
```

```
// Atributo com valores pré-determinados

[
  {
    "marketplace": "TALD00776574000660",
    "id": "28966",
    "name": "É kit",
    "group": "Especificações - Agro, indústria e comércio",
    "groupId": "19785",
    "type": "Radio",
    "typeId": "6",
    "toSKU": false,
    "variant": false,
    "binary": false,
    "active": true,
    "required": false,
    "valueData": [
      {
        "id": "49068",
        "value": "Sim",
        "descriptionValue": "Sim",
        "name": "Sim",
        "code": "49068",
        "active": true
      },
      {
        "id": "49069",
        "value": "Não",
        "descriptionValue": "Não",
        "name": "Não",
        "code": "49069",
        "active": true
      }
    ]
  }
]
```


# Consultar Marcas

Nesta seção indicaremos como consultar as Marcas.

Ao consultar as Marcas, será possível consultar o ID de uma determinada e assim incluí-lo no JSON de produtos.

## GET - Consultar Marcas

```
https://api.skyhub.com.br/brands
```

{% hint style="info" %}
A consulta trará 10 marcas, mas é possível utilizar o **limit** para trazer mais conforme necessidade (Máx. 10). Também é possível aplicar a paginação através do parâmetro ***offset**.*
{% endhint %}

#### Request headers:

<table><thead><tr><th>Key</th><th width="398">Value</th></tr></thead><tbody><tr><td>X-User-Email</td><td>email_de_usuario</td></tr><tr><td>X-Api-Key</td><td>token_de_integracao de sua conta SkyHub</td></tr><tr><td>X-Accountmanager-key</td><td>token_account único de cada Plataforma/ERP</td></tr><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table>

#### **Estrutura de resposta:**

```
{
  "total": 0,
  "limit": 0,
  "offset": "0",
  "sort": "string",
  "values": [
    {
      "tenant": "string",
      "operator": "string",
      "createDate": "1970-01-01T00:00:00.000000",
      "lastUpdate": "1970-01-01T00:00:00.000000",
      "brandData": {
        "id": "string",
        "code": "string",
        "name": "string"
      }
    }
  ]
}
```

#### **Example request:**

```
curl --location -g --request GET 'https://api.skyhub.com.br/brands?limit=4&offset=10' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: Haverá um response body com as Marcas:
{% endhint %}

```
{
  "total": 1000,
  "limit": 4,
  "offset": 10,
  "sort": "lastupdate",
  "values": [
    {
      "tenant": "xxxxxxxxxxxxxx",
      "operator": "xxxxxxxxxxxxxx",
      "account": null,
      "createDate": "2025-01-01T20:01:05.490000",
      "lastUpdate": "2025-01-01T20:01:05.490000",
      "lastEvent": null,
      "brandData": {
        "id": "1rxxxxxx490",
        "code": "1rxxxxxx490",
        "name": "Marca",
        "active": true,
        "menuHome": true
      }
    }
  ]
}
```

## Filtros de consulta

### Como filtrar por nome

É possível realizar buscas por nome de uma determinada marca.&#x20;

{% hint style="info" %}
A busca retornará todas as marcas que possuírem a sequência de caracteres declarada no filtro.
{% endhint %}

Para realizar o filtro pelo nome da marca, deverá ser informada a query **?brandName=** no endpoint /brands, referenciando a sequência de caracteres a ser consultado, conforme exemplo a seguir:

```
https://api.skyhub.com.br/brands?brandName={nome_da_marca}
```

#### Example request:

```
curl --location -g --request GET 'https://api.skyhub.com.br/brands?brandName=est' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 \[Success] - OK: No retorno da consulta acima, retornará todas as marcas que possuírem a sequência 'est' como vemos a seguir:
{% endhint %}

```
{
    "total": 71,
    "limit": 5,
    "offset": 0,
    "sort": "lastupdate",
    "values": [
        {
            "tenant": "00776574000660",
            "operator": "00776574000660",
            "account": null,
            "createDate": "2025-06-18T20:03:01.628000",
            "lastUpdate": "2025-06-18T20:03:01.628000",
            "lastEvent": null,
            "brandData": {
                "id": "175e028778L1V628",
                "code": "175e028778L1V628",
                "name": "Bestway",
                "active": true,
                "menuHome": true
            }
        },
        {
            "tenant": "00776574000660",
            "operator": "00776574000660",
            "account": null,
            "createDate": "2025-06-13T20:03:07.300000",
            "lastUpdate": "2025-06-13T20:03:07.300000",
            "lastEvent": null,
            "brandData": {
                "id": "174985m578tu7300",
                "code": "174985m578tu7300",
                "name": "Homestar",
                "active": true,
                "menuHome": true
            }
        },
        {
            "tenant": "00776574000660",
            "operator": "00776574000660",
            "account": null,
            "createDate": "2025-06-12T20:02:15.451000",
            "lastUpdate": "2025-06-12T20:02:15.451000",
            "lastEvent": null,
            "brandData": {
                "id": "17497Ep69335r451",
                "code": "17497Ep69335r451",
                "name": "Festive",
                "active": true,
                "menuHome": true
            }
        },
        {
            "tenant": "00776574000660",
            "operator": "00776574000660",
            "account": null,
            "createDate": "2025-06-04T20:03:06.711000",
            "lastUpdate": "2025-06-04T20:03:06.711000",
            "lastEvent": null,
            "brandData": {
                "id": "1749078186dl71M1",
                "code": "1749078186dl71M1",
                "name": "Estofamar",
                "active": true,
                "menuHome": true
            }
        },
        {
            "tenant": "00776574000660",
            "operator": "00776574000660",
            "account": null,
            "createDate": "2025-06-04T20:03:06.693000",
            "lastUpdate": "2025-06-04T20:03:06.693000",
            "lastEvent": null,
            "brandData": {
                "id": "Lt174F9078186693",
                "code": "Lt174F9078186693",
                "name": "Estofados Teixeira",
                "active": true,
                "menuHome": true
            }
        }
    ]
}

```

#### Utilizando o limit e o offset

Por padrão, a consulta acima trará somente os primeiros 5 resultados (limit=5), porém pode ser passado na consulta um valor de no máximo 10, trazendo assim essa quantidade de marcas na busca.&#x20;

```
https://api.skyhub.com.br/brands?brandName=est&limit=10
```

Para passar a próxima página, deve-se utilizar o parâmetro offset. Por exemplo, se na requisição acima quiser passar para a segunda página, a consulta abaixo deve ser realizada:

```
https://api.skyhub.com.br/brands?brandName=est&limit=10&offset=10
```


# Criação de Produto

Nesta guia mostraremos a estrutura e exemplos de requisições para criação de produtos simples e variáveis

Acompanhe o detalhamento de cada tipo navegando pelas guias abaixo:

{% content-ref url="/pages/-MG4GsCIMQ\_TJbzVrFLQ" %}
[Produto Simples](/produtos/criacao-de-produto/produto-simples)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4GvX\_wiFnPeAlWG\_l" %}
[Produto Variável](/produtos/criacao-de-produto/produto-variavel)
{% endcontent-ref %}


# Produto Simples

O produto simples é único, não possuindo variação de SKU. Nesta seção temos a estrutura para este tipo de produto, assim como orientações para a sua criação

O produto simples é aquele que possui uma estrutura única, sem SKUs agrupados (variações).&#x20;

Atributos como cor, tamanho e voltagem podem ser definidos tanto a nível de produto quanto a nível de SKU (variações). Será necessário consultar a lista de atributos da categoria e identificar se a categoria aceita esses atributos, porém detalhamos mais abaixo.

Mesmo para produtos simples é necessário haver atributos e informações que fortaleçam a identidade do item, como um título claro e atributos de ficha técnica. Acompanhe o exemplo abaixo:

Quando tratamos um livro, por exemplo, é necessário fornecer o nome completo da obra, além de atributos de ficha técnica como tipo de capa, idioma, quantidade de páginas e outros para enriquecer o cadastro do produto quando anunciado.

Esses atributos de ficha técnica favorecem a localização do produto na realização de filtros nos sites de e-commerce e o título destaca a escolha do cliente final ao realizar as buscas.

Mas não é só isso, existem vários outros requisitos necessários para a integração com o marketplace, como o correto preenchimento do peso, dimensões, status, indexação de imagens, além da inclusão em sua correta estrutura mercadológica.&#x20;

{% hint style="info" %}
A seção [Integração: Produto](/produtos/integracao-produtos#pre-requisitos) desta documentação é capaz de fornecer maiores detalhes sobre os pré-requisitos necessários para a integração de produtos com o marketplace
{% endhint %}

A seguir confira a estrutura esperada para a criação de um produto simples via API.

## Estrutura do JSON

{% hint style="danger" %}
**A estrutura básica para a criação de um produto simples contém campos que devem ser preenchidos com os&#x20;**<mark style="color:red;">**formatos de dados determinados pela API**</mark>**.**&#x20;

A seguir são apresentados os campos que constituem a estrutura de um produto simples e o formato a ser utilizado para inclusão dos dados. A não utilização dos formatos corretos para preenchimento dos dados pode acarretar em reprova proveniente do marketplace, impossibilitando a publicação do item.
{% endhint %}

{% hint style="info" %}
**Novo atributo no corpo do produto.**

A partir de Março/2025, a raiz do produto poderá receber o atributo *crossdocking*.
{% endhint %}

{% hint style="info" %}
**Dentro de "specifications", somente&#x20;**<mark style="color:blue;">**atributos de categoria**</mark>**.**

A partir de Março/2025, no array specifications deverá constar somente atributos de categoria. Mais abaixo explicamos o funcionamento destes atributos.
{% endhint %}

{% hint style="danger" %}
**Validação de preço e preço promocional com valores válidos**

A partir de Março/2025 existirá uma validação na criação e atualização de produto, produto com variação e variação com valores válidos de preço e preço promocional. Esses valores serão considerados válidos quando forem **diferentes** de **nulo** ou **zero**.
{% endhint %}

```json
{
    "product": { // Object
        "sku": "CodigoSKU", // String 
        "name": "Título", // String
        "brand": "CodigoMarca", // String
        "categoryId": "IdCategoria", // String
        "description": "Descrição", // String
        "status": "enabled", // String
        "qty": 0, // Integer
        "crossdocking": "3", // String 
        "price": 0.0, // Double
        "promotional_price": 0.0, // Double
        "cost": 0, // Double
        "weight": 0, // Double
        "height": 0, // Double
        "width": 0, // Double
        "length": 0, // Double
        "ean": "EAN (European Article Number ou Numeração Europeia de Artigos, o código de barras do item)", // String
        "nbm": "NCM (Nomenclatura Comum do Mercosul)", // String
        "images": [ // Array
            "URL da imagem" // String
        ],
        "specifications": [ // Array
            { // Object
                "id": "Valor", // String
                "key”: "valor", // String
                "idValue": “valor”, // String
                "value”: "valor" // String
            },
            { // Object
                "key”: "valor", // String
                "id": "valor", // String
                "value": "valor" // String
            }
        ]
    }
}
```

### Como declarar a categoria

Será necessário realizar a consulta na lista de categorias para obter o **categoryId** e preencher no body do JSON.&#x20;

Para isso, seguir a documentação [**Consultar lista de categorias**](/produtos/categorizacao/consultar-categorias).

Haverá os IDs disponíveis <mark style="color:green;">**'id'**</mark>, <mark style="color:orange;">'id1'</mark>, <mark style="color:orange;">'id2'</mark> e <mark style="color:orange;">'id3'</mark>. Os IDs enumerados representam os níveis de categorias, enquanto o ID em verde representa toda a estrutura. Qualquer um desses IDs disponíveis deve constar em **categoryId**, vai depender do nível em que o lojista deseja catalogar seu produto.

### Como declarar a marca

Será necessário realizar a consulta das marcas para obter o **brand** e preencher no body do JSON. \
\
Para isso, seguir a documentação [**Consultar Marcas**](/produtos/consultar-marcas).<br>

### Como declarar atributos de categoria

Os atributos de categoria devem ser declarados dentro de "specifications", mas com distinções dependendo do tipo de atributo.\
\
Conforme explicado em [**Consultar atributos por categoria**](/produtos/categorizacao/consultar-atributos-por-categoria), há diferenças entre os tipos de atributos:<br>

* Atributos de Livre preenchimento:\
  \
  Em "specifications" a key “value” e “key” ainda são obrigatórias.

* Atributos com valores já pré-determinados:\
  \
  Caso a categoria da especificação seja uma do tipo que receba “idValue”, ainda sera necessário enviar “value”, com o valor correspondente e “key” com o atributo em si. Exemplo:

  Imagine que o "idValue" represente “Sim”, então o payload seria:

```json
{ “key”: “is_kit”, "id": "1", "idValue": "2", "value": "Sim" }
```

#### Atenção ao campo "toSKU"

A consulta de atributos por categoria retornará um campo chamado "**toSKU**", onde este define se o atributo deve ser enviado no produto ***PAI*** ou na sua ***variação***.\
\
Caso o "**toSKU**" seja <mark style="color:orange;">false</mark>, o atributo deverá ser enviado nas especificações do produto pai. Caso <mark style="color:green;">true</mark>, deverá ser enviado nas especificações do produto filho.

Porém, se por acaso o "**toSKU**" seja <mark style="color:green;">true</mark> e o produto se tratar de um produto simples, o atributo deverá ser enviado no "**specifications"** do produto normalmente.

{% hint style="info" %}
Atributos com o '**required**' igual a *<mark style="color:blue;">True</mark>* ao consultar os atributos da categoria, deverão obrigatoriamente constar no JSON do produto. Os demais, são opcionais o envio porém importantes para enriquecimento de cadastro.
{% endhint %}

## POST - Cadastrando um produto simples

Para realizar o cadastro de um produto via API deverá ser utilizado o método POST para o seguinte endpoint:&#x20;

```
https://api.skyhub.com.br/products
```

#### Request headers:

<table><thead><tr><th>Key</th><th width="398">Value</th></tr></thead><tbody><tr><td>X-User-Email</td><td>email_de_usuario</td></tr><tr><td>X-Api-Key</td><td>token_de_integracao de sua conta SkyHub</td></tr><tr><td>X-Accountmanager-key</td><td>token_account único de cada Plataforma/ERP</td></tr><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table>

#### Request body:

```json
{
    "product": { 
        "sku": "CodigoSKU", 
        "name": "Título",
        "brand": "Código da Marca", // Obtido realizando o GET em Marcas
        "categoryId": "Id da Categoria", // Obtido realizando o GET na lista de Categorias
        "description": "Descrição detalhada do produto criado",
        "status": "enabled", // Status (ativo/enabled ou inativo/disabled)
        "qty": 0, // Estoque
        "crossdocking": "3" // Crossdocking
        "price": 0.0, // Preço
        "promotional_price": 0.0, // Preço promocional
        "cost": 0, // Custo do produto para o seller
        "weight": 0, // Peso
        "height": 0, // Altura
        "width": 0, // Largura
        "length": 0, // Comprimento 
        "ean": "EAN",
        "nbm": "NBM/NCM",
        "images": [
            "https:// URL da imagem" 
        ],
        "specifications": [ // Objeto responsável pela inclusão de atributos adicionais
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "key”: "atributo",
                "value": "Texto livre"
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável"
                "value": "Texto livre"
            }
        ]
    }
}
```

#### Exemplo de request:

```json
curl --location --request POST 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "product": {
        "sku": "2022001",
        "name": "Camiseta Branca Tam. Único",
        "brand": "1739052110001030",
        "categoryId": "556",
        "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta regata feminina, disponível na cor branca e tamanho único.",
        "status": "enabled",
        "qty": 1,
        "crossdocking": "3",
        "price": 39.90,
        "promotional_price": 35.90,
        "cost": 19.89,
        "weight": 0.1,
        "height": 25,
        "width": 1,
        "length": 30,
        "ean": "1234567890123",
        "nbm": "11223344",
        "images": [
            "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
        ],
        "specifications": [
            {
                // Exemplo de atributo de categoria - valores pré-determinados
                "id": "28966", // id referente a ser Kit ou não
                "idValue": "49069", // id referente a Não
                "key": "kit", // Atributo em si
                "value": "Não" // Valor do atributo
            },
            {
                // Exemplo de atributo de categoria - preenchimento livre
                "id": "28968", // id referente a Fabricante
                "value": "Fabricador próprio", // texto livre
                "key": "factory" // Atributo em si
            }
        ]
    }
}'
```

#### Resposta esperada:

{% hint style="success" %}
201 \[Success] - Created
{% endhint %}

**Resultado esperado no GET após a criação:**

```json
{
    "name": "Camiseta Branca Tam. Único",
    "nbm": "11223344",
    "ncm": null,
    "sku": "2022001",
    "brand": "1739052110001030",
    "status": "enabled",
    "ean": "1234567890123",
    "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta regata feminina, disponível na cor branca e tamanho único.",
    "product_condition": null,
    "qty": 1,
    "crossdocking": 3,
    "price": 39.9,
    "promotional_price": 35.9,
    "height": 25.0,
    "width": 1.0,
    "length": 30.0,
    "weight": 0.1,
    "cost": 19.89,
    "images": [
        "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg",
        "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "variation_attributes": [],
    "variations": [
        {
            "ean": "1234567890123",
            "sku": "2022001",
            "name": "Camiseta Branca Tam. Único",
            "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta regata feminina, disponível na cor branca e tamanho único.",
            "nbm": "11223344",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 3,
            "qty": 1,
            "price": 39.9,
            "cost": 19.89,
            "promotional_price": 35.9,
            "height": 25.0,
            "width": 1.0,
            "length": 30.0,
            "weight": 0.1,
            "images": [
                "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
            ],
            "specifications": []
        }
    ],
    "specifications": [
        {
            "id": "28966",
            "key": "kit",
            "idValue": "49069",
            "value": "Não"
        },
        {
            "id": "28968",
            "key": "factory",
            "idValue": null,
            "value": "Fabricador próprio"
        }
    ],
    "categories": [
        {
            "code": "556",
            "name": "Maionese"
        }
    ]
}
```

Resultado esperado caso price ou promotional price não sejam válidos:

{% hint style="danger" %}
422 \[Error] - Unprocessable Entity
{% endhint %}

```json
{
    "error": "O SKU [2022001] possue preço inválido. O preço não pode ser nulo ou igual a zero."
}
```


# Produto Variável

O produto variável é aquele onde há um agrupamento de dois ou mais SKUs tendo um atributo diferenciador para distingui-los. Nesta seção temos a estrutura para a criação desse tipo de produto

Produto variável é aquele em que um ou mais SKUs são agrupados; estes SKUs serão diferenciados através de atributos específicos, como tamanho ou cor, por exemplo.

Mesmo para produtos variáveis é necessário haver atributos e informações que fortaleçam a identidade do item, como um título claro e características bem definidas em sua ficha técnica.&#x20;

Acompanhe o exemplo abaixo:

Quando tratamos uma camiseta é necessário fornecer uma breve descrição de suas características dentro do título, a fim de chamar a atenção de um potencial cliente (por exemplo, Título: Camiseta Branca Lisa). Além disso, também faz-se necessário incluir atributos de ficha técnica, como material, fabricante, marca, dentre outros para enriquecer o cadastro do item quando anunciado.

Esses atributos de ficha técnica favorecem a localização do produto na realização de filtros nos sites de e-commerce e o título destaca a escolha do cliente final ao realizar as buscas.

Mas não é só isso, existem vários outros requisitos necessários para a integração com o marketplace, como o correto preenchimento do peso, dimensões, status, indexação de imagens, além da inclusão em sua correta estrutura mercadológica.&#x20;

{% hint style="info" %}
A seção [Integração: Produto](/produtos/integracao-produtos#pre-requisitos) desta documentação é capaz de fornecer maiores detalhes sobre os pré-requisitos necessários para a integração de produtos com o marketplace
{% endhint %}

A seguir confira a estrutura esperada para a criação de um produto variável via API.

## Estrutura do JSON

{% hint style="danger" %}
**A estrutura básica para a criação de um produto variável contém campos que devem ser preenchidos com os&#x20;**<mark style="color:red;">**formatos de dados determinados pela API**</mark>**.**&#x20;

A seguir são apresentados os campos que constituem a estrutura de um produto variável e o formato a ser utilizado para inclusão dos dados. A não utilização dos formatos corretos para preenchimento dos dados pode acarretar em reprova proveniente do marketplace, impossibilitando a publicação da oferta.
{% endhint %}

{% hint style="info" %}
**Novos atributos no corpo das variações.**\
A partir de Março/2025, a raiz das variações ganha os atributos *price, promotional\_price, height, width, length, weight e crossdocking*.
{% endhint %}

{% hint style="warning" %}
**Variações herdam atributos do produto pai.**

Portanto, se algum atributo constar somente na raiz do produto, as variações também o assumirão. Exemplo: Caso as dimensões estejam somente no produto pai, as variações assumirão as mesmas dimensões.
{% endhint %}

{% hint style="danger" %}
**Validação de preço e preço promocional com valores válidos**

A partir de Março/2025 existirá uma validação na criação e atualização de produto, produto com variação e variação com valores válidos de preço e preço promocional. Esses valores serão considerados válidos quando forem **diferentes** de **nulo** ou **zero**.
{% endhint %}

{% hint style="info" %}
**Dentro de "specifications", somente&#x20;**<mark style="color:blue;">**atributos de categoria**</mark>**.**

A partir de Março/2025, no array specifications deverá constar somente atributos de categoria. Mais abaixo explicamos o funcionamento destes atributos.
{% endhint %}

```json
{
  "product": { // Object
    "sku": "CodigoSKU_agrupador", // String 
    "name": "Título", // String
    "brand": "CodigoMarca", // String
    "categoryId": "IdCategoria", // String
    "description": "Descrição", // String
    "status": "enabled", // String
    "price": 0.0, // Double
    "promotional_price": 0.0, // Double
    "cost": 0, // Double
    "weight": 0, // Double
    "height": 0, // Double
    "width": 0, // Double
    "length": 0, // Double
    "brand": "Marca", // String        
    "nbm": "NCM (Nomenclatura Comum do Mercosul)", // String
    "images": [ // Array
      "URL da imagem" // String
    ],
    "specifications": [ // Array
      { // Object
        "id": "Valor", // String
        "idValue": "valor", // String
        "value": "valor", // String
        "key": "valor" // String
      },
      { // Object
        "id": "valor", // String
        "value": "valor", // String
        "key": "valor" // String
      }
    ],
    "variations": [ // Array
      {
        "sku": "CodigoSKU", // String 
        "name": "Título", // String
        "qty": 10 // String
      }      
    ]
  }
}
```

### Como declarar a categoria

Será necessário realizar a consulta na lista de categorias para obter o **categoryId** e preencher no body do JSON.&#x20;

Para isso, seguir a documentação [**Consultar lista de categorias**](/produtos/categorizacao/consultar-categorias).

Haverá os ID's disponíveis <mark style="color:green;">**'id'**</mark>, <mark style="color:orange;">'id1'</mark>, <mark style="color:orange;">'id2'</mark> e <mark style="color:orange;">'id3'</mark>. Os ID's enumerados representam os níveis de categorias, enquanto o ID em verde representa toda a estrutura. Qualquer um desses ID's disponíveis deve constar em **categoryId**, vai depender do nível em que o lojista deseja catalogar seu produto.

### Como declarar a marca

Será necessário realizar a consulta das marcas para obter o **brand** e preencher no body do JSON. \
\
Para isso, seguir a documentação [**Consultar Marcas**](/produtos/consultar-marcas).

### Como declarar atributos de categoria

Os atributos de categoria devem ser declarados dentro de "specifications", mas com distinções dependendo do tipo de atributo.\
\
Conforme explicado em [**Consultar atributos por categoria**](/produtos/categorizacao/consultar-atributos-por-categoria), os atributos podem ser de dois tipos:<br>

* Atributos de Livre Preenchimento:\
  \
  Em '**specifications**' deve ser declarado ***id*** (identificador do atributo), ***value*** (texto livre e não tem um dado estruturado, ou seja, não há idValue para ser enviado), **key** (atributo) e **value** (valor em texto livre do atributo).<br>
* Atributos com valores já pré-determinados:\
  \
  Em '**specifications**' deve ser declarado ***id*** (identificador do atributo), ***idValue*** (identificador do valor escolhido dentro do array *<mark style="background-color:blue;">valueData</mark>*),  **key** (atributo) e **value** (valor em texto livre do atributo).

#### Atenção ao campo "toSKU"

A consulta de atributos por categoria retornará um campo chamado "**toSKU**", onde este define se o atributo deve ser enviado no produto ***PAI*** ou na sua ***variação***.\
\
Caso o "**toSKU**" seja <mark style="color:orange;">false</mark>, o atributo deve ser enviado nas especificações do produto pai. Caso <mark style="color:green;">true</mark>, deverá ser enviado nas especificações do produto filho.

Porém, se por acaso o "**toSKU**" seja <mark style="color:green;">true</mark> e o produto se tratar de um produto simples, o atributo deverá ser enviado no "**specifications"** do produto normalmente.

{% hint style="info" %}
Atributos com o '**required**' igual a *<mark style="color:blue;">True</mark>* ao consultar os atributos da categoria, deverão obrigatoriamente constar no JSON do produto. Os demais, são opcionais o envio.
{% endhint %}

{% hint style="warning" %}
Atributos de categoria são diferentes de atributos de produtos. Atributos de categoria possuem o padrão "id" e "idValue"/"value",  já os atributos de produto possuem o padrão "key" e "value".
{% endhint %}

## **POST - Cadastrando um produto variável**

Para realizar o cadastro de um produto variável via API deverá ser utilizado o método POST para o seguinte endpoint:

```
https://api.skyhub.com.br/products
```

**Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

A diferença para o JSON do produto simples é que no cadastro da variação é informado o array variations com as informações dos SKUs agrupados, seus atributos diferenciadores e outras especificações.

Dentro de 'specifications' deverá ser declarado o(s) atributo(s) de variação(ões) preenchido(s), de acordo com consulta prévia no endpoint de atributos de categoria. \
\
Como informado mais acima, atributos que possuírem o campo "**toSKU**" como <mark style="color:green;">true,</mark> tratam-se de atributos de variação e devem ser enviados dentro das especificações das variações.

#### Request body:

```json
{
    "product": {
        "sku": "CodigoSKU_agrupador",
        "name": "Título",
        "brand": "Código da Marca", // Obtido realizando o GET em Marcas
        "categoryId": "Id da Categoria", // Obtido realizando o GET na lista de Categorias
        "description": "Descrição detalhada do produto criado",
        "status": "enabled", // Status (ativo/enabled ou inativo/disabled)
        "price": 0.0, // Preço
        "promotional_price": 0.0, // Preço promocional
        "cost": 0, // Custo do produto para o seller
        "weight": 0, // Peso
        "height": 0, // Altura
        "width": 0, // Largura
        "length": 0, // Comprimento
        "crossdocking": "3", // Crossdocking
        "nbm": "NBM/NCM",
        "images": [
            ""
        ],
        "specifications": [ // Objeto responsável pela inclusão de atributos
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "value": "Texto livre",
                "key": "atributo"
                   
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável",
                 "key": "atributo",
                "value": "valor do atributo"
            }
        ],
        "variations": [
            {
                "sku": "CodigoSKU_variacao",
                "qty": 0, // Estoque
                "ean": "EAN (European Article Number ou Numeração Europeia de Artigos, o código de barras do item)",
                "price": 0.00, // Preço
                "status": "enabled",
                "promotional_price": 0.00, // Preço promocional
                "weight": 0, // Peso
                "height": 0, // Altura
                "width": 0, // Largura
                "length": 0, // Comprimento
                "crossdocking": "3", // Crossdocking
                "images": [
                    "https:// URL da imagem" // Imagem da variação
                ],
                "specifications": [ // Objeto responsável pela inclusão de atributos
                    // Somente atributos com "toSKU" igual a True
                    { // Atributo de categoria - preenchimento livre
                        "id": "id do atributo",
                         "key": "atributo",
                        "value": "Texto livre"
                    },
                    { // Atributo de categoria - valores pré-determinados
                        "id": "id do atributo",
                         "key": "atributo",
                         "value": "valor do atributo",
                        "idValue": "id da opção selecionável"
                    }
                ]
            }
        ]
    }
}
```

{% hint style="warning" %}
Há um **limite** de <mark style="color:red;">**100 variações**</mark> que podem ser inclusas na estrutura de um produto, sendo necessário respeitar tal limitação para não haverem reprovas ao encaminhar o SKU variável para a API.&#x20;
{% endhint %}

#### **Exemplo de request:**

Veja abaixo o JSON de criação de um produto com variações, sendo o SKU P2022 o ID do produto "pai" e os SKUs F2023 e F2024 os IDs das variações:

```json
curl --location --request POST 'https: //api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "product": {
        "sku": "P2022",
        "name": "Identificador de cédula falsa",
        "brand": "Skyhub",
        "categoryId": "24",
        "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
        "status": "enabled",
        "price": 100.00,
        "promotional_price": 99.00,
        "cost": 0.0,
        "weight": 0.100,
        "height": 20,
        "width": 30,
        "length": 20,
        "nbm": "98769898",
        "images": [
            "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
        ],
        "specifications": [
            {
                "id": "id_do_atributo",
                "value": "Texto livre",
                "key": "atributo"
            },
            {
                "id": "id_do_atributo",
                "key": "atributo",
                "value": "Texto livre",
                "idValue": "id_da_opcao_selecionavel"
            }
        ],
        "variations": [
            {
            //Price e promotional price herdados do pai
                "sku": "F2023",
                "status": "enabled",
                "qty": 10,
                "ean": "9876543210987",
                "weight": 0.100,
                "height": 20,
                "width": 30,
                "length": 20,
                "crossdocking": "3",
                "images": [
                    "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "id": "29229", // ID referente a voltagem
                        "key": "atributo",
                        "value": "Texto livre",
                        "idValue": "49105"
                    }
                ]
            },
            {
            //Price herdado do pai
                "sku": "F2024",
                "promotional_price": 89.99,
                "status": "enabled",
                "qty": 10,
                "ean": "9876543210985",
                "weight": 0.100,
                "height": 20,
                "width": 30,
                "length": 20,
                "crossdocking": "3",
                "images": [
                    "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "id": "29229", // ID referente a voltagem
                        "key": "voltagem",
                        "value": "220v",
                        "idValue": "49106"
                    }
                ]
            }
        ]
    }
}'
```

**Response esperado:**

{% hint style="success" %}
201 \[Sucess] - Created
{% endhint %}

Exemplo de produto criado com sucesso da requisição:

```json
{
    "name": "Identificador de cédula falsa",
    "nbm": null,
    "ncm": null,
    "sku": "P2022",
    "brand": "Skyhub",
    "status": "enabled",
    "ean": null,
    "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
    "product_condition": null,
    "qty": 0,
    "crossdocking": 0,
    "price": 0.0,
    "promotional_price": 0.0,
    "height": 20.0,
    "width": 30.0,
    "length": 20.0,
    "weight": 0.1,
    "cost": 0.0,
    "images": [
        "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg",
        "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
    ],
    "variation_attributes": [],
    "variations": [
        {
            "ean": "9876543210987",
            "sku": "F2023",
            "name": "Identificador de cédula falsa",
            "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
            "nbm": "98769898",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 3,
            "qty": 10,
            "price": 100.0,
            "cost": 0.0,
            "promotional_price": 99.0,
            "height": 20.0,
            "width": 30.0,
            "length": 20.0,
            "weight": 0.1,
            "images": [
                "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
            ],
            "specifications": [
                {
                    "id": "29229",
                    "key": "atributo",
                    "idValue": "49105",
                    "value": "Texto livre"
                }
            ]
        },
        {
            "ean": "9876543210985",
            "sku": "F2024",
            "name": "Identificador de cédula falsa",
            "description": "Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
            "nbm": "98769898",
            "ncm": null,
            "status": "enabled",
            "product_condition": null,
            "crossdocking": 3,
            "qty": 10,
            "price": 100.0,
            "cost": 0.0,
            "promotional_price": 89.99,
            "height": 20.0,
            "width": 30.0,
            "length": 20.0,
            "weight": 0.1,
            "images": [
                "https://a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
            ],
            "specifications": [
                {
                    "id": "29229",
                    "key": "voltagem",
                    "idValue": "49106",
                    "value": "220v"
                }
            ]
        }
    ],
    "specifications": [
        {
            "id": "id_do_atributo",
            "key": "atributo",
            "idValue": "id_da_opcao_selecionavel",
            "value": "Texto livre"
        }
    ],
    "categories": [
        {
            "code": "24",
            "name": "Automação comercial"
        }
    ]
}
```

**Exemplo de resposta caso o preço do pai e o preço promocional do pai sejam enviados com 0 ou nulo.**

{% hint style="danger" %}
422 \[Error] - Unprocessable Entity
{% endhint %}

**Response body:**

```json
{
    "error": "Os seguintes SKUs possuem preços inválidos: F2023, F2024. O preço não pode ser nulo ou igual a zero."
}
```


# Copy of Produto Variável

O produto variável é aquele onde há um agrupamento de dois ou mais SKUs tendo um atributo diferenciador para distingui-los. Nesta seção temos a estrutura para a criação desse tipo de produto

{% hint style="danger" %}
**Não estão ainda em produção alterações a respeito de Categorização, Marcas e atributos de categorias.**
{% endhint %}

Produto variável é aquele em que um ou mais SKUs são agrupados; estes SKUs serão diferenciados através de atributos específicos, como tamanho ou cor, por exemplo.

Atributos como cor, tamanho e voltagem podem ser definidos tanto a nível de produto quanto a nível de SKU (variações). Será necessário consultar a lista de atributos da categoria e identificar se a categoria aceita esses atributos, porém detalhamos mais abaixo.

Mesmo para produtos variáveis é necessário haver atributos e informações que fortaleçam a identidade do item, como um título claro e características bem definidas em sua ficha técnica. Acompanhe o exemplo abaixo:

Quando tratamos uma camiseta é necessário fornecer uma breve descrição de suas características dentro do título, a fim de chamar a atenção de um potencial cliente (por exemplo, Título: Camiseta Branca Lisa). Além disso, também faz-se necessário incluir atributos de ficha técnica, como material, fabricante, marca, dentre outros para enriquecer o cadastro do item quando anunciado.

Esses atributos de ficha técnica favorecem a localização do produto na realização de filtros nos sites de e-commerce e o título destaca a escolha do cliente final ao realizar as buscas.

Mas não é só isso, existem vários outros requisitos necessários para a integração com o marketplace, como o correto preenchimento do peso, dimensões, status, indexação de imagens, além da inclusão em sua correta estrutura mercadológica.&#x20;

{% hint style="info" %}
A seção [Integração: Produto](/produtos/integracao-produtos#pre-requisitos) desta documentação é capaz de fornecer maiores detalhes sobre os pré-requisitos necessários para a integração de produtos com o marketplace
{% endhint %}

A seguir confira a estrutura esperada para a criação de um produto variável via API.

## Estrutura do JSON

{% hint style="danger" %}
**A estrutura básica para a criação de um produto variável contém campos que devem ser preenchidos com os&#x20;**<mark style="color:red;">**formatos de dados determinados pela API**</mark>**.**&#x20;

A seguir são apresentados os campos que constituem a estrutura de um produto variável e o formato a ser utilizado para inclusão dos dados. A não utilização dos formatos corretos para preenchimento dos dados pode acarretar em reprova proveniente do marketplace, impossibilitando a publicação da oferta.
{% endhint %}

{% hint style="info" %}
**Dentro de "specifications", somente&#x20;**<mark style="color:blue;">**atributos de categoria**</mark>**.**

A partir de Março/2025, no array specifications deverá constar somente atributos de categoria. Mais abaixo explicamos o funcionamento destes atributos.
{% endhint %}

```
{
    "product": { // Object
        "sku": "CodigoSKU_agrupador", // String 
        "name": "Título", // String
        "brand": "CodigoMarca", // String
        "categoryId": "IdCategoria", // String
        "description": "Descrição", // String
        "status": "enabled", // String
        "price": 0.0, // Double
        "promotional_price": 0.0, // Double
        "cost": 0, // Double
        "weight": 0, // Double
        "height": 0, // Double
        "width": 0, // Double
        "length": 0, // Double
        "brand": "Marca", // String        
        "nbm": "NCM (Nomenclatura Comum do Mercosul)", // String
        "images": [ // Array
            "URL da imagem" // String
        ],
        "specifications": [ // Array
            { // Object
                "key": "Atributo", // String
                "value": "Valor do atributo" // String
            },
            { // Object
                "id": "Valor", // String
                "idValue" // String
            },
            { // Object
                "id": "valor", // String
                "value": "valor" // String
            }
        ],
        "variations": [ // Array
             { // Object }          
        ],
        "variation_attributes":[ // Array
          "atributo1",
          "atributo2",
          "atributo3"
          ]
    }
}
```

### Como declarar a categoria

Será necessário realizar a consulta na lista de categorias para obter o **categoryId** e preencher no body do JSON.&#x20;

Para isso, seguir a documentação [**Consultar lista de categorias**](/produtos/categorizacao/consultar-categorias).

Haverá os IDs disponíveis <mark style="color:green;">**'id'**</mark>, <mark style="color:orange;">'id1'</mark>, <mark style="color:orange;">'id2'</mark> e <mark style="color:orange;">'id3'</mark>. Os IDs enumerados representam os níveis de categorias, enquanto o ID em verde representa toda a estrutura. Qualquer um desses IDs disponíveis deve constar em **categoryId**, vai depender do nível em que o lojista deseja catalogar seu produto.

### Como declarar a marca

Será necessário realizar a consulta das marcas para obter o **brand** e preencher no body do JSON. \
\
Para isso, seguir a documentação [**Consultar Marcas**](/produtos/consultar-marcas).

### Como declarar atributos de categoria

Os atributos de categoria devem ser declarados dentro de '**specifications**', porém com distinção em relação aos demais atributos.\
\
Como visto em [**Consultar atributos por categoria**](/produtos/categorizacao/consultar-atributos-por-categoria), há diferenças entre os tipos de atributos:<br>

* Se for um atributo de livre preenchimento:\
  \
  Em '**specifications**' deve ser declarado ***id*** (id do atributo) e ***value*** (texto livre e não tem um dado estruturado, ou seja, não há idValue para ser enviado).\ <br>
* Se for um atributo com valores já pré-determinados:\
  \
  Em '**specifications**' deve ser declarado ***id*** (id do atributo) e ***idValue*** (id do valor de uma das opções presente no array *<mark style="background-color:blue;">valueData</mark>*).

#### Atenção ao campo "toSKU"

A consulta de atributos por categoria retornará um campo chamado "**toSKU**", onde este define se o atributo deve ser enviado no produto ***PAI*** ou na sua ***variação***.\
\
Caso o "**toSKU**" seja <mark style="color:orange;">false</mark>, o atributo deve ser enviado nas especificações do produto pai. Caso <mark style="color:green;">true</mark>, deverá ser enviado nas especificações do produto filho.

Porém, se por acaso o "**toSKU**" seja <mark style="color:green;">true</mark> e o produto se tratar de um produto simples, o atributo deverá ser enviado no "**specifications"** do produto normalmente.

{% hint style="info" %}
Atributos com o '**required**' igual a *<mark style="color:blue;">True</mark>* ao consultar os atributos da categoria, deverão obrigatoriamente constar no JSON do produto. Os demais, são opcionais o envio.
{% endhint %}

{% hint style="warning" %}
Atributos de categoria são diferentes de atributos de produtos. Atributos de categoria possuem o padrão "id" e "idValue"/"value",  já os atributos de produto possuem o padrão "key" e "value".
{% endhint %}

## **POST - Cadastrando um produto variável**

Para realizar o cadastro de um produto variável via API deverá ser utilizado o método POST para o seguinte endpoint:

```
https://api.skyhub.com.br/products
```

**Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

A diferença para o JSON do produto simples é que no cadastro da variação é informado o array variations com as informações dos SKUs agrupados, seus atributos diferenciadores e outras especificações.

Dentro de 'specifications' deverá ser declarado o atributo de variação preenchido, de acordo com consulta prévia no endpoint de atributos de categoria.&#x20;

{% hint style="danger" %}
Todo produto variável deve contar com o *array **variation\_attributes***, onde deverão ser informados os atributos responsáveis pela diferenciação das variações.

Por exemplo, ao cadastrar uma camiseta e preencher para os SKUs filhos - aqueles vinculados a um SKU agrupador/pai - o atributo "Tamanho" para diferenciar uma variação da outra, é esperado que o mesmo atributo ("Tamanho") seja informado no *array **variation\_attributes***.&#x20;
{% endhint %}

#### Request body:

```
{
    "product": {
        "sku": "CodigoSKU_agrupador",
        "name": "Título",
        "brand": "Código da Marca", // Obtido realizando o GET em Marcas
        "categoryId": "Id da Categoria", // Obtido realizando o GET na lista de Categorias
        "description": "Descrição detalhada do produto criado",
        "status": "enabled", // Status (ativo/enabled ou inativo/disabled)
        "price": 0.0, // Preço
        "promotional_price": 0.0, // Preço promocional
        "cost": 0, // Custo do produto para o seller
        "weight": 0, // Peso
        "height": 0, // Altura
        "width": 0, // Largura
        "length": 0, // Comprimento
        "brand": "Marca",
        "nbm": "NBM/NCM",
        "images": [
            ""
        ],
        "specifications": [ // Objeto responsável pela inclusão de atributos
            {
                "key": "Atributo",
                "value": "Valor do atributo"
            },
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "value": "Texto livre"
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável"
            }
        ],
        "variations": [
            {
                "sku": "CodigoSKU_variacao",
                "qty": 0, // Estoque
                "ean": "EAN (European Article Number ou Numeração Europeia de Artigos, o código de barras do item)",
                "images": [
                    "https:// URL da imagem" // Imagem da variação
                ],
                "specifications": [ // Objeto responsável pela inclusão de atributos
                    {
                        "key": "Atributo",
                        "value": "Valor do atributo"
                    },
                    {
                        "key": "Atributo",
                        "value": "Valor do atributo"
                    },
                    {
                        "key": "price", 
                        "value": "0.0" // Preço da variação
                    },
                    {
                        "key": "promotional_price",
                        "value": "0.0" // Preço promocional da variação
                    }
                ]
            }
        ],
        "variation_attributes": [ // Objeto responsável pela inclusão do atributo diferenciador
            "Atributo_diferenciador_1",
            "Atributo_diferenciador_2"
        ]
    }
}
```

{% hint style="warning" %}
Há um **limite** de <mark style="color:red;">**100 variações**</mark> que podem ser inclusas na estrutura de um produto, sendo necessário respeitar tal limitação para não haverem reprovas ao encaminhar o SKU variável para a API.&#x20;
{% endhint %}

#### **Example request:**

Veja abaixo o JSON de criação de um produto com variações, sendo o SKU P2022 o ID do produto "pai" e os SKUs F2023 e F2024 os IDs das variações:

```
curl --location --request POST 'https: //api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "product": {
        "sku": "P2022",
        "name": "Identificador de cédula falsa",
        "brand": "1739052110001030", // id de uma marca
        "categoryId": "24" // id referente a categoria de Identificador de cédula falsa
        "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
        "status": "enabled",
        "price": 00.00,
        "promotional_price": 00.00,
        "cost": 0.0,
        "weight": 0.100,
        "height": 20,
        "width": 30,
        "length": 20,
        "brand": "Skyhub",
        "nbm": "98769898",
        "images": [
            ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
        ],
        "specifications": [
            {
                "key": "Especicações do Produto PAI",
                "value": "Especificações do Produto PAI"
            },
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "value": "Texto livre"
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável"
            }
        ],
        "variations": [
            {
                "sku": "F2023",
                "price": 00.00, // Alteração ainda não está em vigor
                "promotional_price": 00.00, // Alteração ainda não está em vigor
                "qty": 10,
                "ean": "9876543210987",
                "images": [
                    ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "key": "Cor",
                        "value": "Branca"
                    },
                    {
                        "key": "Tamanho",
                        "value": "P"
                    },
                    {
                        "key": "price",
                        "value": "50.00"
                    },
                    {
                        "key": "promotional_price",
                        "value": "40.00"
                    },
                 {
                        "id": "29229", // id referente a voltagem
                        "idValue": "49105" // id referente ao valor 220 V
                    }
                ]
            },
            {
                "sku": "F2024",
                "price": 00.00, // Alteração ainda não está em vigor
                "promotional_price": 00.00, // Alteração ainda não está em vigor
                "qty": 10,
                "ean": "9876543210985",
                "images": [
                    ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "key": "Cor",
                        "value": "Branca"
                    },
                    {
                        "key": "Tamanho",
                        "value": "M"
                    },
                    {
                        "key": "price",
                        "value": "50.00"
                    },
                    {
                        "key": "promotional_price",
                        "value": "40.00"
                    },
                    {
                        "id": "29229", // id referente a voltagem
                        "idValue": "49106" // id referente ao valor 220 V
                    }
                ]
            }
        ],
        "variation_attributes": [
            "Cor",
            "Tamanho"
        ]
    }
}'
```


# Copy of Produto Variável

O produto variável é aquele onde há um agrupamento de dois ou mais SKUs tendo um atributo diferenciador para distingui-los. Nesta seção temos a estrutura para a criação desse tipo de produto

{% hint style="danger" %}
**Não estão ainda em produção alterações a respeito de Categorização, Marcas e atributos de categorias.**
{% endhint %}

Produto variável é aquele em que um ou mais SKUs são agrupados; estes SKUs serão diferenciados através de atributos específicos, como tamanho ou cor, por exemplo.

Atributos como cor, tamanho e voltagem podem ser definidos tanto a nível de produto quanto a nível de SKU (variações). Será necessário consultar a lista de atributos da categoria e identificar se a categoria aceita esses atributos, porém detalhamos mais abaixo.

Mesmo para produtos variáveis é necessário haver atributos e informações que fortaleçam a identidade do item, como um título claro e características bem definidas em sua ficha técnica. Acompanhe o exemplo abaixo:

Quando tratamos uma camiseta é necessário fornecer uma breve descrição de suas características dentro do título, a fim de chamar a atenção de um potencial cliente (por exemplo, Título: Camiseta Branca Lisa). Além disso, também faz-se necessário incluir atributos de ficha técnica, como material, fabricante, marca, dentre outros para enriquecer o cadastro do item quando anunciado.

Esses atributos de ficha técnica favorecem a localização do produto na realização de filtros nos sites de e-commerce e o título destaca a escolha do cliente final ao realizar as buscas.

Mas não é só isso, existem vários outros requisitos necessários para a integração com o marketplace, como o correto preenchimento do peso, dimensões, status, indexação de imagens, além da inclusão em sua correta estrutura mercadológica.&#x20;

{% hint style="info" %}
A seção [Integração: Produto](/produtos/integracao-produtos#pre-requisitos) desta documentação é capaz de fornecer maiores detalhes sobre os pré-requisitos necessários para a integração de produtos com o marketplace
{% endhint %}

A seguir confira a estrutura esperada para a criação de um produto variável via API.

## Estrutura do JSON

{% hint style="danger" %}
**A estrutura básica para a criação de um produto variável contém campos que devem ser preenchidos com os&#x20;**<mark style="color:red;">**formatos de dados determinados pela API**</mark>**.**&#x20;

A seguir são apresentados os campos que constituem a estrutura de um produto variável e o formato a ser utilizado para inclusão dos dados. A não utilização dos formatos corretos para preenchimento dos dados pode acarretar em reprova proveniente do marketplace, impossibilitando a publicação da oferta.
{% endhint %}

{% hint style="info" %}
**Dentro de "specifications", somente&#x20;**<mark style="color:blue;">**atributos de categoria**</mark>**.**

A partir de Março/2025, no array specifications deverá constar somente atributos de categoria. Mais abaixo explicamos o funcionamento destes atributos.
{% endhint %}

```
{
    "product": { // Object
        "sku": "CodigoSKU_agrupador", // String 
        "name": "Título", // String
        "brand": "CodigoMarca", // String
        "categoryId": "IdCategoria", // String
        "description": "Descrição", // String
        "status": "enabled", // String
        "price": 0.0, // Double
        "promotional_price": 0.0, // Double
        "cost": 0, // Double
        "weight": 0, // Double
        "height": 0, // Double
        "width": 0, // Double
        "length": 0, // Double
        "brand": "Marca", // String        
        "nbm": "NCM (Nomenclatura Comum do Mercosul)", // String
        "images": [ // Array
            "URL da imagem" // String
        ],
        "specifications": [ // Array
            { // Object
                "key": "Atributo", // String
                "value": "Valor do atributo" // String
            },
            { // Object
                "id": "Valor", // String
                "idValue" // String
            },
            { // Object
                "id": "valor", // String
                "value": "valor" // String
            }
        ],
        "variations": [ // Array
             { // Object }          
        ],
        "variation_attributes":[ // Array
          "atributo1",
          "atributo2",
          "atributo3"
          ]
    }
}
```

### Como declarar a categoria

Será necessário realizar a consulta na lista de categorias para obter o **categoryId** e preencher no body do JSON.&#x20;

Para isso, seguir a documentação [**Consultar lista de categorias**](/produtos/categorizacao/consultar-categorias).

Haverá os IDs disponíveis <mark style="color:green;">**'id'**</mark>, <mark style="color:orange;">'id1'</mark>, <mark style="color:orange;">'id2'</mark> e <mark style="color:orange;">'id3'</mark>. Os IDs enumerados representam os níveis de categorias, enquanto o ID em verde representa toda a estrutura. Qualquer um desses IDs disponíveis deve constar em **categoryId**, vai depender do nível em que o lojista deseja catalogar seu produto.

### Como declarar a marca

Será necessário realizar a consulta das marcas para obter o **brand** e preencher no body do JSON. \
\
Para isso, seguir a documentação [**Consultar Marcas**](/produtos/consultar-marcas).

### Como declarar atributos de categoria

Os atributos de categoria devem ser declarados dentro de '**specifications**', porém com distinção em relação aos demais atributos.\
\
Como visto em [**Consultar atributos por categoria**](/produtos/categorizacao/consultar-atributos-por-categoria), há diferenças entre os tipos de atributos:<br>

* Se for um atributo de livre preenchimento:\
  \
  Em '**specifications**' deve ser declarado ***id*** (id do atributo) e ***value*** (texto livre e não tem um dado estruturado, ou seja, não há idValue para ser enviado).\ <br>
* Se for um atributo com valores já pré-determinados:\
  \
  Em '**specifications**' deve ser declarado ***id*** (id do atributo) e ***idValue*** (id do valor de uma das opções presente no array *<mark style="background-color:blue;">valueData</mark>*).

#### Atenção ao campo "toSKU"

A consulta de atributos por categoria retornará um campo chamado "**toSKU**", onde este define se o atributo deve ser enviado no produto ***PAI*** ou na sua ***variação***.\
\
Caso o "**toSKU**" seja <mark style="color:orange;">false</mark>, o atributo deve ser enviado nas especificações do produto pai. Caso <mark style="color:green;">true</mark>, deverá ser enviado nas especificações do produto filho.

Porém, se por acaso o "**toSKU**" seja <mark style="color:green;">true</mark> e o produto se tratar de um produto simples, o atributo deverá ser enviado no "**specifications"** do produto normalmente.

{% hint style="info" %}
Atributos com o '**required**' igual a *<mark style="color:blue;">True</mark>* ao consultar os atributos da categoria, deverão obrigatoriamente constar no JSON do produto. Os demais, são opcionais o envio.
{% endhint %}

{% hint style="warning" %}
Atributos de categoria são diferentes de atributos de produtos. Atributos de categoria possuem o padrão "id" e "idValue"/"value",  já os atributos de produto possuem o padrão "key" e "value".
{% endhint %}

## **POST - Cadastrando um produto variável**

Para realizar o cadastro de um produto variável via API deverá ser utilizado o método POST para o seguinte endpoint:

```
https://api.skyhub.com.br/products
```

**Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

A diferença para o JSON do produto simples é que no cadastro da variação é informado o array variations com as informações dos SKUs agrupados, seus atributos diferenciadores e outras especificações.

Dentro de 'specifications' deverá ser declarado o atributo de variação preenchido, de acordo com consulta prévia no endpoint de atributos de categoria.&#x20;

{% hint style="danger" %}
Todo produto variável deve contar com o *array **variation\_attributes***, onde deverão ser informados os atributos responsáveis pela diferenciação das variações.

Por exemplo, ao cadastrar uma camiseta e preencher para os SKUs filhos - aqueles vinculados a um SKU agrupador/pai - o atributo "Tamanho" para diferenciar uma variação da outra, é esperado que o mesmo atributo ("Tamanho") seja informado no *array **variation\_attributes***.&#x20;
{% endhint %}

#### Request body:

```
{
    "product": {
        "sku": "CodigoSKU_agrupador",
        "name": "Título",
        "brand": "Código da Marca", // Obtido realizando o GET em Marcas
        "categoryId": "Id da Categoria", // Obtido realizando o GET na lista de Categorias
        "description": "Descrição detalhada do produto criado",
        "status": "enabled", // Status (ativo/enabled ou inativo/disabled)
        "price": 0.0, // Preço
        "promotional_price": 0.0, // Preço promocional
        "cost": 0, // Custo do produto para o seller
        "weight": 0, // Peso
        "height": 0, // Altura
        "width": 0, // Largura
        "length": 0, // Comprimento
        "brand": "Marca",
        "nbm": "NBM/NCM",
        "images": [
            ""
        ],
        "specifications": [ // Objeto responsável pela inclusão de atributos
            {
                "key": "Atributo",
                "value": "Valor do atributo"
            },
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "value": "Texto livre"
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável"
            }
        ],
        "variations": [
            {
                "sku": "CodigoSKU_variacao",
                "qty": 0, // Estoque
                "ean": "EAN (European Article Number ou Numeração Europeia de Artigos, o código de barras do item)",
                "images": [
                    "https:// URL da imagem" // Imagem da variação
                ],
                "specifications": [ // Objeto responsável pela inclusão de atributos
                    {
                        "key": "Atributo",
                        "value": "Valor do atributo"
                    },
                    {
                        "key": "Atributo",
                        "value": "Valor do atributo"
                    },
                    {
                        "key": "price", 
                        "value": "0.0" // Preço da variação
                    },
                    {
                        "key": "promotional_price",
                        "value": "0.0" // Preço promocional da variação
                    }
                ]
            }
        ],
        "variation_attributes": [ // Objeto responsável pela inclusão do atributo diferenciador
            "Atributo_diferenciador_1",
            "Atributo_diferenciador_2"
        ]
    }
}
```

{% hint style="warning" %}
Há um **limite** de <mark style="color:red;">**100 variações**</mark> que podem ser inclusas na estrutura de um produto, sendo necessário respeitar tal limitação para não haverem reprovas ao encaminhar o SKU variável para a API.&#x20;
{% endhint %}

#### **Example request:**

Veja abaixo o JSON de criação de um produto com variações, sendo o SKU P2022 o ID do produto "pai" e os SKUs F2023 e F2024 os IDs das variações:

```
curl --location --request POST 'https: //api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "product": {
        "sku": "P2022",
        "name": "Identificador de cédula falsa",
        "brand": "1739052110001030", // id de uma marca
        "categoryId": "24" // id referente a categoria de Identificador de cédula falsa
        "description": "[A descrição deve trazer detalhes do produto, com a finalidade de atrair o consumidor final] Camiseta polo masculina, disponível na cor branca e em 2 tamanhos diferentes.",
        "status": "enabled",
        "price": 00.00,
        "promotional_price": 00.00,
        "cost": 0.0,
        "weight": 0.100,
        "height": 20,
        "width": 30,
        "length": 20,
        "brand": "Skyhub",
        "nbm": "98769898",
        "images": [
            ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
        ],
        "specifications": [
            {
                "key": "Especicações do Produto PAI",
                "value": "Especificações do Produto PAI"
            },
            { // Atributo de categoria - preenchimento livre
                "id": "id do atributo",
                "value": "Texto livre"
            },
            { // Atributo de categoria - valores pré-determinados
                "id": "id do atributo",
                "idValue": "id da opção selecionável"
            }
        ],
        "variations": [
            {
                "sku": "F2023",
                "price": 00.00, // Alteração ainda não está em vigor
                "promotional_price": 00.00, // Alteração ainda não está em vigor
                "qty": 10,
                "ean": "9876543210987",
                "images": [
                    ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "key": "Cor",
                        "value": "Branca"
                    },
                    {
                        "key": "Tamanho",
                        "value": "P"
                    },
                    {
                        "key": "price",
                        "value": "50.00"
                    },
                    {
                        "key": "promotional_price",
                        "value": "40.00"
                    },
                 {
                        "id": "29229", // id referente a voltagem
                        "idValue": "49105" // id referente ao valor 220 V
                    }
                ]
            },
            {
                "sku": "F2024",
                "price": 00.00, // Alteração ainda não está em vigor
                "promotional_price": 00.00, // Alteração ainda não está em vigor
                "qty": 10,
                "ean": "9876543210985",
                "images": [
                    ""https: //a-static.mlcdn.com.br/800x560/camiseta-masculina-gola-polo-branca-piquet-com-elastano-basica-lisa-ixoria/gdmstore/11100354223/39945a2c0162febe1ae663fb7019d5ca.jpeg"
                ],
                "specifications": [
                    {
                        "key": "Cor",
                        "value": "Branca"
                    },
                    {
                        "key": "Tamanho",
                        "value": "M"
                    },
                    {
                        "key": "price",
                        "value": "50.00"
                    },
                    {
                        "key": "promotional_price",
                        "value": "40.00"
                    },
                    {
                        "id": "29229", // id referente a voltagem
                        "idValue": "49106" // id referente ao valor 220 V
                    }
                ]
            }
        ],
        "variation_attributes": [
            "Cor",
            "Tamanho"
        ]
    }
}'
```


# Atualização de Produto

Nesta guia mostraremos a estrutura e exemplos de requisições para atualização de produtos simples e variáveis

Acompanhe o detalhamento de cada tipo navegando pelas guias abaixo:

{% content-ref url="/pages/-MG4KPBq5uok2O\_k4FyI" %}
[Produto Simples](/produtos/atualizacao-produto/produto-simples)
{% endcontent-ref %}

{% content-ref url="/pages/yz0sKB22NqyFGFBEnMsf" %}
[Produto Variável](/produtos/atualizacao-produto/produto-variavel-1)
{% endcontent-ref %}


# Produto Simples

Existem algumas diferenças na atualização de produtos simples e variáveis, nesta página mostraremos como alterar produtos simples

## PUT - Atualizando um produto simples

A atualização de informações é realizada através do método PUT, mantendo o mesmo header e conservando o atributo que deverá ser alterado.

Para realizar a atualização, é preciso utilizar o método PUT no mesmo endpoint de produtos acrescido do código SKU do produto simples conforme abaixo:

```
https://api.skyhub.com.br/products/{SKU}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Request body:**

```
{
  "product": {
    "Atributo": "Novo Valor"
  }
}
```

{% hint style="danger" %}
O objeto ***product*** deve ser preservado na request, caso contrário um erro será retornado na tentativa de atualizar o produto.
{% endhint %}

#### **Example request:**

No exemplo abaixo, estamos alterando somente o nome do produto, então todos os demais atributos foram retirados da requisição, para facilitar o entendimento.

```
curl --location --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "name": "Nome Atualizado do Produto"
  }
}'
```

#### Response esperado:

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

{% hint style="danger" %}
Para a atualização de **imagens** é necessário atentar-se a **URL** indexada: Para realizar alterações nas imagens de um produto é preciso encaminhar uma **nova URL**, ou seja, <mark style="color:red;">**não é possível reutilizar a URL previamente enviada**</mark>; somente com URLs diferentes a nova imagem será refletida pelo marketplace.&#x20;

\[Ver Comunicado: [Envio de Imagens para o Marketplace](/comunicados/comunicados-2021/envio-de-imagens-para-o-mktp-b2w)]
{% endhint %}

### Como atualizar preço e estoque

Assim como quaisquer atualizações em produtos, para alterações nos campos de preço (*price* e *promotional\_price*) e estoque deve ser utilizado o método **PUT** no */products/{SKU}*.&#x20;

A seguir temos exemplos de requisições para as atualizações de preço e estoque para produtos simples:

#### Atualização de preço:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "price": 100.00,
    "promotional_price": 80.00
  }
}'
```

#### Atualização de estoque:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "qty": 1000
  }
}'
```

#### Atualização de preço e estoque:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "qty": 1000,
    "price": 100.00,
    "promotional_price": 80.00
  }
}'
```

{% hint style="info" %}
Nas atualizações de preço e estoque <mark style="color:red;">**não deve ser enviada a estrutura completa do produto**</mark>, ou seja, é preciso enviar apenas os respectivos campos (***qty***, ***price*** e ***promotional\_price***).
{% endhint %}

### Como atualizar o atributo crossdocking

O *crossdocking* é o atributo responsável pela definição do prazo do item, isto é, ele representa o tempo que o *seller* leva para fabricar o produto após o pagamento do pedido ter sido aprovado.

O atributo *crossdocking* deve vir na raiz do produto, assim como preço, estoque e outros.

{% hint style="info" %}
Apesar de passar número, o atributo é uma *string*.
{% endhint %}

A seguir temos um exemplo de requisição para atualização do atributo *crossdocking*:

```
curl --location --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "crossdocking": "3"
    }
  }'
```

### **Criação de variação em produtos simples**

Quando desejar tornar um Produto Simples em Produto Variável, é necessário enviar no body a estrutura de um Produto Variável, com o Array '<mark style="color:blue;">**variations**</mark>' especificando as variações a serem criadas e também o '<mark style="color:blue;">**variation\_attributes**</mark>' especificando os atributos variantes.

{% hint style="danger" %}
**IMPORTANTE:**

Só indicamos a criação de variações em produtos simples enquanto o SKU não tiver conectado ao Marketplace.&#x20;

**E se o produto já estiver conectado?**

Se um produto simples já estiver conectado e uma nova variação é enviada no produto, automaticamente será excluída a oferta do produto simples no Marketplace.

O produto só será criado novamente no Marketplace desta vez como variável, quando o parceiro realizar uma nova conexão do produto.
{% endhint %}

```
curl --location -g --request PUT 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "sku": "foo", // String
    "name": "foo", // String
    "description": "foo", // String
    "status": "enabled", // String
    "price": 0.0, // Integer
    "promotional_price": 0.0, // Integer
    "crossdocking": '0" // String
    "cost": 0, // Integer
    "brand": "foo", // String
    "weight": 0, // Integer
    "height": 0, // Integer
    "width": 0, // Integer
    "length": 0, // Integer
    "variations": [ //Exemplo de Variação

      {
        "sku": "foo-1",
        "qty": 0,
        "crossdocking": '0" // String
        "status": "enabled" // String
        "ean": "foo", // String
        "specifications": [ 
                    { // Atributo de categoria - preenchimento livre
                        "id": "id do atributo",
                        "value": "Texto livre"
                    },
                    { // Atributo de categoria - valores pré-determinados
                        "id": "id do atributo",
                        "idValue": "id da opção selecionável"
                    }
        ]
      }
    ]
  }
}'


```


# Copy of Produto Variável

Nesta página mostraremos como realizar atualizações em variações previamente criadas

## PUT - Atualizando a variação de um produto

Será necessário o método PUT com os mesmos headers para realizar a atualização da variação, porém o endpoint utilizado é o */variations* seguido do SKU da variação conforme abaixo:

```
https://api.skyhub.com.br/variations/{SKU_VARIACAO}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| x-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| x-accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Request body:**

```
{
  "variation": {
    "price": 158,
    "promotional_price": 126.4,
    "images": [
      "https://foo"
    ],
    "ean": "0000000000000",
    "qty": "10",
    "specifications": [
      {
        "value": "Atributo",
        "key": "Valor"
      }
    ]
  }
}
```

{% hint style="danger" %}
O objeto ***product*** deve ser substituído pelo ***variation*** e não pode ser retirado da requisição, caso contrário um erro será retornado na tentativa de atualizar a variação.
{% endhint %}

#### **Example request:**

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "price": 158,
    "promotional_price": 126.4
    "images": [
      "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "ean": "0123456789012",
    "qty": "5",
    "specifications": [
      {
        "value": "crossdocking",
        "key": "3"
      }
    ]
  }
}'
```

#### **Response esperado:**

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

{% hint style="danger" %}
Para a atualização de **imagens** é necessário atentar-se a **URL** indexada: Para realizar alterações nas imagens de um produto é preciso encaminhar uma **nova URL**, ou seja, <mark style="color:red;">**não é possível reutilizar a URL previamente enviada**</mark>; somente com URLs diferentes a nova imagem será refletida pelo marketplace.&#x20;

\[Ver Comunicado: [Envio de Imagens para o Marketplace](/comunicados/comunicados-2021/envio-de-imagens-para-o-mktp-b2w)]
{% endhint %}

### Como atualizar preço e estoque

Assim como quaisquer atualizações em variações, para alterações nos campos de preço (*price* e *promotional\_price*) e estoque deve ser utilizado o método **PUT** no */variations/{SKU\_VARIACAO}*.&#x20;

{% hint style="info" %}
Deve ser realizado um PUT por variação.
{% endhint %}

A seguir temos exemplos de requisições para as atualizações de preço e estoque para variações:

#### Atualização de preço por variação:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "price": 158,
    "promotional_price": 126.4
  	"specifications": [
  		{
  			"key": "price",
  			"value": "50.00"
  		},
  		{
  			"key": "promotional_price",
  			"value": "45.00"
  		}
  	]
  }
}'
```

#### Atualização de estoque por variação:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
      "qty": 1
  }
}'
```

#### Atualização de preço e estoque:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "qty": 5,
    "price": 158,
    "promotional_price": 126.4
  	"specifications": [
  		{
  			"key": "price",
  			"value": "185.90"
  		},
  		{
  			"key": "promotional_price",
  			"value": "180.90"
  		}
  	]
  }
}'
```

{% hint style="info" %}
Caso deseje realizar alterações no SKU agrupador é possível seguir as orientações da guia Atualização de Produto > [Produto Simples](/produtos/atualizacao-produto/produto-simples#put-atualizando-um-produto-simples).
{% endhint %}


# Produto Variável

Nesta página mostraremos como realizar atualizações em variações previamente criadas

## PUT - Atualizando a variação de um produto

Será necessário o método PUT com os mesmos headers para realizar a atualização da variação, porém o endpoint utilizado é o */variations* seguido do SKU da variação conforme abaixo:

```
https://api.skyhub.com.br/variations/{SKU_VARIACAO}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| x-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| x-accountmanager-key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Request body:**

```
{
  "variation": {
    "price": 0.0, // Double
    "promotional_price": 0.0, // Double
    "status": "enabled", // String
    "images": [
      "https://foo"
    ],
    "ean": "0000000000000", // String
    "qty": 10, // Integer
    "crossdocking": "3" // String
    "specifications": [
      { // Atributo de categoria - preenchimento livre
          "id": "id do atributo", // String
          "value": "Texto livre" // String
      },
      { // Atributo de categoria - valores pré-determinados
          "id": "id do atributo", // String
          "idValue": "id da opção selecionável" // String
      }
    ]
  }
}
```

{% hint style="danger" %}
O objeto ***product*** deve ser substituído pelo ***variation*** e não pode ser retirado da requisição, caso contrário um erro será retornado na tentativa de atualizar a variação.
{% endhint %}

#### **Example request:**

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "price": 158,
    "promotional_price": 126.4,
    "status": "enabled",
    "images": [
      "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "ean": "0123456789012",
    "qty": "5",
    "crossdocking": "3",
    "weight": 0.100,
    "height": 20,
    "width": 30,
    "length": 20,
    "specifications": [
      {
        "id": "29229",
        "idValue": "49106"
      }
    ]
  }
}'
```

#### **Response esperado:**

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

{% hint style="danger" %}
Para a atualização de **imagens** é necessário atentar-se a **URL** indexada: Para realizar alterações nas imagens de um produto é preciso encaminhar uma **nova URL**, ou seja, <mark style="color:red;">**não é possível reutilizar a URL previamente enviada**</mark>; somente com URLs diferentes a nova imagem será refletida pelo marketplace.&#x20;

\[Ver Comunicado: [Envio de Imagens para o Marketplace](/comunicados/comunicados-2021/envio-de-imagens-para-o-mktp-b2w)]
{% endhint %}

### Como atualizar preço e estoque

Assim como quaisquer atualizações em variações, para alterações nos campos de preço (*price* e *promotional\_price*) e estoque deve ser utilizado o método **PUT** no */variations/{SKU\_VARIACAO}*.&#x20;

{% hint style="info" %}
Deve ser realizado um PUT por variação.
{% endhint %}

A seguir temos exemplos de requisições para as atualizações de preço e estoque para variações:

#### Atualização de preço por variação:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "price": 158,
    "promotional_price": 126.4
  }
}'
```

#### Atualização de estoque por variação:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
      "qty": 1
  }
}'
```

#### Atualização de preço, estoque e crossdocking:

```
curl --location -g --request PUT 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "variation": {
    "qty": 5,
    "price": 158,
    "promotional_price": 126.4,
    "crossdocking": "3"
  }
}'
```

{% hint style="info" %}
Caso deseje realizar alterações no SKU agrupador é possível seguir as orientações da guia Atualização de Produto > [Produto Simples](/produtos/atualizacao-produto/produto-simples#put-atualizando-um-produto-simples).
{% endhint %}


# Consulta de Produto

Nesta guia mostraremos como realizar a consulta da estrutura de produtos simples e variáveis. Além disso, será possível validar como realizar a pesquisa por variação

Acompanhe o detalhamento de cada tipo navegando pelas guias abaixo:

{% content-ref url="/pages/-MGQ0NOaaITTcCOceErG" %}
[Produto Simples e Variável](/produtos/consulta-produto/produto-simples)
{% endcontent-ref %}

{% content-ref url="/pages/-MGQ0OEevgG03KeUfKjK" %}
[Variação de Produto](/produtos/consulta-produto/produto-variavel)
{% endcontent-ref %}


# Produto Simples e Variável

Mostraremos nesta página como consultar produtos simples e variáveis via API

## GET - Consultando um produto

{% hint style="info" %}
**Desde Março/2025, o array associations foi retirado do JSON do produto.**&#x20;
{% endhint %}

Para realizar uma consulta na API devemos utilizar o método GET, preenchendo os devidos headers no endpoint abaixo:

```
https://api.skyhub.com.br/products/{SKU}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Example request:**

```
curl --location -g --request GET 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: Haverá um response body com a estrutura do SKU consultado:
{% endhint %}

```
{
    "sku": "SKU do produto",
    "name": "Título",
    "description": "Descrição detalhada",
    "status": "disabled",
    "removed": false, 
    "qty": 5,
    "price": 100.0,
    "promotional_price": 80.0,
    "cost": 49.0,
    "weight": 3.0,
    "height": 1.0,
    "width": 1.0,
    "length": 1.0,
    "condition_type": null,
    "brand": "Marca",
    "ean": "1234567890123",
    "nbm": "11223344",
    "categories": [
        {
            "code": "01",
            "name": "SKYHUB"
        }
    ],
    "images": [
        "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "specifications": [
    { 
                "key": "Tamanho",
                "value": "Único"
            },
            { 
                "key": "Crossdocking",
                "value": "3"
            }
    ],
}
```

### Consultando todos os produtos

Além da consulta individual, também é possível listar todos os produtos criados na conta.&#x20;

Para isto, basta utilizar o GET no endpoint */products* sem informar um SKU, conforme abaixo:

```
https://api.skyhub.com.br/products
```

#### **Example request:**

```
curl --location --request GET 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: O retorno é semelhante ao da pesquisa anterior, porém serão visualizados todos os SKUs não conectados da conta e abaixo temos um exemplo resumido do retorno esperado:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "name": "Título 01",
            "description": "Descrição 01",
            "status": "disabled",
            (...)
        },
        {
            "sku": "SKU_02",
            "name": "Título 02",
            "description": "Descrição 02",
            "status": "enabled",
            (...)
        },
        {
            "sku": "SKU_03",
            "name": "Título 03",
            "description": "Descrição 03",
            "status": "enabled",
            (...)
        }
    ],
    "total": 101,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUa..........wOw=="
}
```

#### Filtros da consulta

Por padrão, o GET em /products retornará todos os produtos não conectados ao Marketplace.\
\
Para retornar os produtos conectados ao Marketplace, devemos filtrar com o parâmetro type **"/products?filters\[type]=link"**.

Produtos conectados são aqueles que o lojista decide por habilitar a vender. Quando conectado, o produto fica disponível (caso estoque positivo), já desconectado o lojista desabilita o produto para a venda.

### Como paginar a consulta de produtos

A listagem de produtos retornará 25 itens por página. Caso a conta tenha mais que 25 produtos, será necessário fazer a paginação através do **cursor**, que deve ser inserido no endpoint em forma de query string.

#### Como montar a query?

Ao realizar o GET no */products*, ao final da consulta será apresentado o campo **next** que trará como parâmetro o **cursor**, como visualizado a seguir:

```
"total": 101,
"next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUa..........wOw=="
```

Ao localizar o **cursor**, basta inseri-lo no endpoint para que seja possível alcançar a próxima página. Abaixo temos um exemplo de utilização da paginação:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?cursor=cXVlcnlUa..........wOw=="
}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

A cada página o cursor será alterado até que chegue na última, quando a requisição retornará sucesso, porém trará um *array* vazio:

```
{
    "products": [],
    "total": 101,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUa..........swOw=="
}
```

{% content-ref url="/pages/-MG4KvGq5WV\_\_nP8pZK3" %}
[Filtros de Consultas](/produtos/outros-recursos-de-produtos/filtros-produtos)
{% endcontent-ref %}


# Variação de Produto

Nesta seção explicaremos como realizar a consulta de uma variação através da API

## GET - Consultando a variação de um produto

{% hint style="info" %}
**Desde Março/2025, o array associations foi retirado do JSON do produto.**&#x20;
{% endhint %}

É possível utilizar o método GET e os mesmos headers das ações anteriores para consultar diretamente uma variação previamente criada. Para tal consulta, é necessário utilizar o endpoint:

```
https://api.skyhub.com.br/variations/{SKU_VARIACAO}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Example request:**

```
curl --location -g --request GET 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: Será retornada a estrutura da variação referenciada no endpoint:
{% endhint %}

```
{
    "variation": {
        "sku": "SKU da Variação",
        "qty": 10,
        "price": 199.0,
        "ean": "9876543210987",
        "weight": 0.100,
        "height": 20,
        "width": 30,
        "length": 20,
        "images": [
            "https://foo"
        ],
        "status": enabled,
        "specifications": [
            {
                "key": "price",
                "value": "199.0"
            },
            {
                "key": "promotional_price",
                "value": "149.0"
            }
        ]
    },
    "product": {
        "sku": "SKU Agrupador"
    }
}
```

Note que ao final do resultado é exibido o SKU do ***product***, que é o SKU pai/agrupador da variação consultada. Este SKU só poderá ser consultado no endpoint */products* conforme descrito na seção anterior ([Consulta de Produto > Produto Simples e Variável](/produtos/consulta-produto/produto-simples)).

###


# Exclusão de Produto

Nesta seção será fornecida a orientação para exclusão de itens

Uma vez cadastrados, é possível realizar via API a exclusão de produtos.&#x20;

Importante se atentar que antes da exclusão de um item já conectado ao marketplace a sua venda deve ser pausada/inativada, processo que se dá através da [desconexão](/rehub/rehub-acoes-de-produto#desconectar-produto-no-marketplace).&#x20;

Pelas guias abaixo é possível obter informações sobre a exclusão de produtos e variações:

{% content-ref url="/pages/-MG4Kk5o5FZzSUEItuz0" %}
[Produto Simples e Variável](/produtos/excluir-produto/produto-simples)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4Kn15dUpIRW3oISKj" %}
[Variação de Produto](/produtos/excluir-produto/produto-variavel)
{% endcontent-ref %}


# Produto Simples e Variável

Neste guia iremos entender como excluir um produto simples ou variável

## DELETE - Excluindo um produto&#x20;

Ao se tratar de um item em venda, a exclusão deve ser realizada apenas após a inativação do anúncio que se dá através do processo de [desconexão](/rehub/rehub-acoes-de-produto#desconectar-produto-no-marketplace). Outro ponto a ser validado antes da exclusão é se existem pedidos pendentes para o item; caso haja um pedido pendente no marketplace e o SKU seja removido, a entrega não será integrada a API e não poderá ser consumida pela plataforma/ERP.

Para seguir com a exclusão é preciso realizar um DELETE na seguinte URL, referenciando o SKU a ser excluído:

```
https://api.skyhub.com.br/products/{SKU}
```

{% hint style="info" %}
Para a exclusão será informado o SKU.&#x20;

Em caso de produtos que possuem variações, o código a ser utilizado na URI */products/{SKU}* é o do SKU pai/agrupador, consequentemente, serão excluídas também as variações dependentes daquele agrupador.
{% endhint %}

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Example request:**

```
curl --location -g --request DELETE 'https://api.skyhub.com.br/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

{% hint style="warning" %}
**Não é possível excluir itens via batch.**
{% endhint %}


# Variação de Produto

Neste guia iremos entender como excluir a variação de um produto

## DELETE - Excluindo uma variação&#x20;

Ao optar pela exclusão de uma variação de item publicado no marketplace é necessário verificar se não existem pedidos pendentes de integração com a API; caso haja um pedido pendente no marketplace e o SKU seja removido, a entrega não será integrada a API e não poderá ser consumida pela plataforma/ERP.

Para seguir com a exclusão é preciso realizar um DELETE na seguinte URL, referenciando o SKU da variação a ser excluída:

```
https://api.skyhub.com.br/variations/{SKU_VARIACAO}
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### **Example request:**

```
curl --location -g --request DELETE 'https://api.skyhub.com.br/variations/{SKU_VARIACAO}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

{% hint style="warning" %}
**Não é possível a exclusão via batch.**
{% endhint %}


# Outros Recursos de Produtos

Nesta seção são apresentados outros recursos pertinentes a API de produtos, como filtros a serem aplicados, criação de atributos e consulta de URLs

Navegue nas opções a seguir para consultar os recursos da API de produtos:

{% content-ref url="/pages/-MG4KvGq5WV\_\_nP8pZK3" %}
[Filtros de Consultas](/produtos/outros-recursos-de-produtos/filtros-produtos)
{% endcontent-ref %}

{% content-ref url="/pages/-LUBfH9eC31xZ2XKHkIS" %}
[Endpoint Atributos](/produtos/outros-recursos-de-produtos/endpoint-atributos)
{% endcontent-ref %}

{% content-ref url="/pages/-MG4L0\_8UE4IG4ydU67Q" %}
[Consulta URL](/produtos/outros-recursos-de-produtos/consulta-url)
{% endcontent-ref %}


# Filtros de Consultas

A API oferece a possibilidade de informar a query para filtrar a listagem de produtos

Para aplicar filtros por produtos com queries específicas é necessário utilizar a URL base disponibilizada a seguir:&#x20;

```
http://api.skyhub.com.br/products
```

#### **Request headers:**

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

Através da URL e dos headers informados é possível realizar os filtros por:

* Status;
* Nome;
* Quantidade em estoque;
* Campos específicos no retorno.

### Como filtrar por status

É possível realizar a listagem de produtos através de seus status, onde deverá ser informada a query ***?filters\[status]=*** no endpoint */products*, referenciando o status a ser consultado, conforme exemplo a seguir:

```
https://api.skyhub.com.br/products?filters[status]={enabled
 ou disabled}
```

Ao informar o parâmetro ***?filters\[status]=enabled*** serão retornados todos os produtos **ativos** (enabled); caso selecione o parâmetro ***?filters\[status]=disabled*** serão retornados os produtos **inativos** (disabled).

#### **Example request:**

Segue um exemplo de requisição para listagem de produtos com status disabled:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?filters[status]=disabled' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: No retorno para a consulta acima serão visualizados todos os SKUs da conta que possuírem o *status* disabled como vemos a seguir:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "name": "Título 01",
            "description": "Descrição 01",
            "status": "disabled",
            (...)
        }
    ],
    "total": 1,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUa..........wOw=="
}
```

### Como filtrar por nome

Para realizar a listagem de produtos através de um nome específico deverá ser informada a query ***?filters\[name]=*** no endpoint */products*, referenciando o nome a ser consultado, conforme exemplo a seguir:

```
https://api.skyhub.com.br/products?filters[name]={nome_do_item}
```

#### **Example request:**&#x20;

Segue um exemplo de requisição para listagem de SKUs com o termo "produto" no título:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?filters[name]=produto' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: No retorno para a consulta acima serão visualizados todos os SKUs da conta que possuírem no campo *name* a *string* "produto" como vemos a seguir:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "name": "Produto teste",
            "description": "Descrição 01",
            "status": "enabled",
          (...)
        },
        {
            "sku": "SKU_02",
            "name": "PRODUTO SIMPLES",
            "description": "Descrição 02",
            "status": "enabled",
          (...)
        },
        {
            "sku": "SKU_03",
            "name": "PRODUTO SIMPLES ESPECIAL",
            "description": "Descrição 03",
            "status": "enabled",
          (...)
        }
    (...)
    ],
    "total": 43,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUaGVu...........wOw=="
}
```

### Como filtrar por quantidade em estoque

O filtro por quantidade (*qty*) permite a consulta de produtos com determinados estoques, sendo:

#### Consulta de produtos com quantidade em estoque <mark style="color:green;">**maior ou igual**</mark> ao valor especificado

Para realizar a listagem de produtos cujo estoque seja maior ou igual a um valor definido na busca deverá ser informada a query ***?filters\[qty\_from]=*** no endpoint */products*, referenciando a quantidade desejada, conforme exemplo a seguir:

```
https://api.skyhub.com.br/products?filters[qty_from]={qty}
```

#### **Example request:**&#x20;

Segue um exemplo de requisição para listagem de produtos com estoque maior ou igual a 50 unidades:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?filters[qty_from]=50' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: No retorno para a consulta acima serão visualizados todos os SKUs da conta que possuírem o valor maior ou igual a 50 unidades no campo *qty*, como vemos a seguir:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "name": "Título 01",
            "description": "Descrição 01",
            "status": "enabled",
            "qty": 10000,
            (...)
        },
        {
            "sku": "SKU_02",
            "name": "Título 02",
            "description": "Descrição 02",
            "status": "enabled",
            "qty": 100,
            (...)
        },
        {
            "sku": "SKU_03",
            "name": "Título 03",
            "description": "Descrição 03",
            "status": "enabled",
            "qty": 400,
            (...)
        }
    (...)
    ],
    "total": 15,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUa............swOw=="
```

#### Consulta de produtos com quantidade em estoque <mark style="color:green;">**menor ou igual**</mark> ao valor especificado

Para realizar a listagem de produtos cujo estoque seja menor ou igual a um valor definido na busca deverá ser informada a query ***?filters\[qty\_to]=*** no endpoint */products* referenciando a quantidade desejada, conforme exemplo a seguir:

```
https://api.skyhub.com.br/products?filters[qty_to]={qty}
```

#### **Example request:**

Segue um exemplo de requisição para listagem de produtos com estoque menor ou igual a 50 unidades:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?filters[qty_to]=50' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: No retorno para a consulta acima serão visualizados todos os SKUs da conta que possuírem o valor menor ou igual a 50 unidades para o campo *qty*, como vemos a seguir:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "name": "Título 01",
            "description": "Descrição 01",
            "status": "disabled",
            "qty": 5,
            (...)
        },
        {
            "sku": "SKU_02",
            "name": "Título 02",
            "description": "Descrição 03",
            "status": "enabled",
            "qty": 3,
            (...)
        },
        {
            "sku": "SKU_03",
            "name": "Título 03",
            "description": "Descrição 03",
            "status": "enabled",
            "qty": 49,
            (...)
        }
    (...)
    ],
    "total": 86,
    "next": "https://api.skyhub.com.br/products?cursor=cXVlcnlUaG...........swOw=="
}
```

{% hint style="info" %}
É possível combinar os parâmetros ***filters\[qty\_from]*** e ***filters\[qty\_to]*** para listar produtos cujos estoques se encontram dentro de uma faixa específica, por exemplo:

* Desejo consultar apenas os SKUs que possuem estoque entre 5 e 10 unidades: Para isso basta adicionar ao GET no endpoint */products* o filtro **?filters\[qty\_from]=5\&filters\[qty\_to]=10**;
* Desejo consultar apenas os produtos que possuem 5 unidades em estoque: Para essa listagem basta incluir na pesquisa o **?filters\[qty\_from]=5\&filters\[qty\_to]=5**.
  {% endhint %}

### **Como consultar campos específicos**

Na estrutura de um produto são definidos diversos campos, como SKU, imagens, EAN, entre outros.

Através da API é possível restringir a consulta para que o retorno mostre apenas determinados atributos. Para isto, deverá ser informada a query ***?only\[]=*** no endpoint */products* referenciando o atributo que deseja visualizar, conforme descrito a seguir:

```
https://api.skyhub.com.br/products?only[]={atributo}
```

#### **Example request:**&#x20;

Segue um exemplo de requisição para listagem de todos os produtos, filtrando no retorno apenas os campos SKU, imagem e custo:

```
curl --location -g --request GET 'https://api.skyhub.com.br/products?only[]=sku&only[]=images&only[]=cost' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### **Response esperado:**

{% hint style="success" %}
200 \[Success] - OK: No retorno para a consulta acima serão visualizados os campos *sku*, *images* e *cost* de todos os produtos da conta, como vemos a seguir:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "cost": 1374.45,
            "images": [
                "https://images-americanas.b2w.io/produtos/1234567890/imagens/camiseta-branca-tam-un/1234567890_1_xlarge.jpg"
            ]
        },
        {
            "sku": "SKU_02",
            "cost": 49.0,
            "images": [
                "https://images-americanas.b2w.io/produtos/1122334455/imagens/camiseta-preta/1122334455_1_xlarge.jpg"
            ]
        },
        {
            "sku": "SKU_03",
            "cost": 49.0,
            "images": [
                "https://images-americanas.b2w.io/produtos/0123456789/imagens/livro-para-colorir/0123456789_1_xlarge.jpg"
            ]
        }
    (...)
    ],
    "total": 101,
    "next": "https://api.skyhub.com.br/products?only[]=sku&only[]=images&only[]=cost&cursor=cXVlcnlUa........swOw=="
```


# Endpoint Atributos

Os atributos são elementos que ajudam a diferenciar ou descrever características de especificação técnica do produto criado

{% hint style="danger" %}
**Esse endpoint foi descontinuado em Março/2025.**
{% endhint %}

### Por que algo simples é tão importante para o produto?

Os atributos são informações importantes para os filtros de categorias e para diferenciar os SKUs de um produto; quanto mais atributos/composição o produto tiver, mais chances terá de aparecer no filtro de categorias.

Abaixo temos alguns exemplos de atributos que são obrigatórios no marketplace (mktp) por categoria:

| Atributos      | Categoria            |
| -------------- | -------------------- |
| **Cor**        | Moda                 |
| **Sabor**      | Nutrição/Suplementos |
| **Tamanho**    | Moda                 |
| **Voltagem**   | Eletrodomésticos     |
| **Volumetria** | Perfumes             |

Os produtos não devem se limitar apenas aos atributos mencionados acima, por exemplo, no seguimento de moda temos outros atributos/composição do produto, tais como marca, fabricante, dentre outros.

Para melhor compreensão de atributos obrigatórios, imagine uma loja do seguimento de **moda** vendendo no marketplace, o mktp precisa ter a informação de **cor** e **tamanho** de uma camiseta, pois estes são atributos de diferenciação para cada SKU do produto; através destes atributos será possível que o marketplace disponibilize as opções disponíveis para venda.

Agora que mencionamos a importância dessas informações, vamos à prática!&#x20;

A API disponibiliza um endpoint para a criação de atributos que poderão ser utilizados para a caracterização dos produtos, assim como através do mesmo também é possível realizar a consulta dos atributos existentes na conta.&#x20;

### POST - Criando um atributo

A criação de atributos se dá a partir de um POST no endpoint a seguir:

```
https://api.skyhub.com.br/attributes
```

#### Request headers:

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### Request body:

```
{
  "attribute": {
    "name": "att_name", // [String] Identificador interno do atributo
    "label": "Atributo Exemplo", // [String] Label que será visualizada no front da API
    "options": [ // [Array] Campo opcional. Lista as opções do atributo caso ele seja do tipo 'select' (por exemplo, cor: azul, branca, vermelha)
      "foo",
      "foo",
      "foo"
    ]
  }
}
```

#### Example request:

```
curl --location --request POST 'https://api.skyhub.com.br/attributes' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "attribute": {
    "name": "Cor_Exemplo",
    "label": "Cor - Exemplo", 
    "options": [ 
      "Azul",
      "Branco",
      "Vermelho"
    ]
  }
}'
```

#### Response esperado:

{% hint style="success" %}
201 - Created
{% endhint %}

Para visualizar o atributo diretamente no front da API, deve ser acessado o menu SkyHub > Atributos. A seguir temos a visualização retirada do front atual da API:

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FIadlGy6AekZWpkV2MBzB%2Fimage.png?alt=media&amp;token=9a675d1f-63df-4965-9d66-057fe3269acc" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2229754833-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LMEDke_zMlYG7Bfov0H%2Fuploads%2FFrHdagrSKfmjenKAGw5b%2Fimage.png?alt=media&amp;token=5709ef1a-fd52-4c6b-967f-bf9cdd7734b1" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Na tela acima, o Código traz o campo **name** definido via API. Já o Título traz o valor preenchido para o campo **label**.

Caso esteja utilizando o antigo front da API, a sequência vista será Label e Código, que representam, respectivamente os campos **label** e **name**.
{% endhint %}

{% hint style="warning" %}
Dentre as melhores práticas, recomendamos fortemente que o atributo seja criado à parte, para posterior envio (vínculo) junto ao produto que deseja criar na API.
{% endhint %}

Não seguir a prática acima eleva a taxa de processamento da API, podendo ocasionar retornos menos eficientes: Os atributos também são criados ao serem incluídos na estrutura do produto; cada vez que um SKU é enviado para a API, nossa ferramenta verifica se seus atributos já existem para que seja realizada ou não a criação dos mesmos.

Com o atributo previamente criado, é possível seguir com a sua inclusão na estrutura do produto, ação que é exemplificada a seguir utilizando a base de um produto variável:&#x20;

```
curl --location --request POST 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "product": {
    "sku": "2022002",
    "name": "Camiseta Tam. Único",
    "description": "Camiseta regata feminina, disponível na cor branca e tamanho único.",
    "status": "enabled",
    "price": 30.00,
    "promotional_price": 29.00,
    "cost": 19.90,
    "weight": 0.100,
    "height": 20,
    "width": 30,
    "length": 20,
    "brand": "SkyHub",
    "nbm": "11223344",
    "categories": [],
    "images": [
      "https://images-americanas.b2w.io/produtos/2638788562/imagens/regata-basic-feminina-canelada-branca/2638788562_1_xlarge.jpg"
    ],
    "specifications": [
      {
        "key": "Tamanho",
        "value": "Único"
      }
    ],
    "variations": [
      {
        "sku": "2022002A",
        "qty": 10,
        "ean": "1234567890123",
        "images": [],
        "specifications": [
          {
            "key": "Cor_Exemplo", // Código (name) do atributo
            "value": "Branco"
          }
        ]
      }
    ],
    "variation_attributes": [
      "Cor_Exemplo" // Em caso de produtos variáveis, o Código (name) também deverá ser adicionado ao array variation_attributes ao se tratar de um atributo diferenciador 
    ]
  }
}'
```

{% hint style="danger" %}
O campo a ser inserido no *array specifications* é o valor da coluna **Código** (aquele que demonstramos na tela de atributos do painel SkyHub), ou seja, será incluído o campo que via API foi identificado como **name**.&#x20;
{% endhint %}

### GET - Consultando os atributos existentes

A consulta visa listar todos os atributos criados em uma conta. A partir dos headers padronizados e sinalizados acima basta executar um GET no endpoint:

```
https://api.skyhub.com.br/attributes
```

#### Example request:

```
curl --location --request GET 'https://api.skyhub.com.br/attributes' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]: O retorno da requisição trará uma lista com os atributos existentes na conta, sendo eles os padrões (como *sku*, *status*, *description*, entre outros) ou aqueles criados via API:
{% endhint %}

```
{
    "attributes": [
        {
            "name": "Altura",
            "label": "Altura",
            "type": "text"
        },
        {
            "name": "Anatel",
            "label": "Anatel",
            "type": "text"
        },
        {
            "name": "Cor",
            "label": "Cor",
            "type": "select"
        },
        {
            "name": "Garantia",
            "label": "Garantia",
            "type": "text"
        },
        {
            "name": "brand",
            "label": "brand",
            "type": "text"
        },
        {
            "name": "cost",
            "label": "cost",
            "type": "text"
        },
        {
            "name": "crossdocking",
            "label": "crossdocking",
            "type": "text"
        }
        (...)
    ]
}
```

{% hint style="danger" %}
Como informado em nosso [guia de melhores práticas](/guias-api-skyhub/melhores-praticas#atributos-na-skyhub), nossa estrutura de criação de atributos não possibilita que trabalhe com a mesma **string** de um atributo com **case sensitive** tentando diferenciar essa criação.&#x20;

Devido a esta regra é necessário que sempre utilize em seus produtos o atributo que foi usado pela primeira vez, o que torna a consulta de atributos um recurso extremamente importante para a sua integração com a API.
{% endhint %}

### PUT - Atualizando um atributo

Para atualizar um determinado atributo que foi criado na API deverá ser realizada uma requisição com o método PUT, onde serão utilizados os headers padronizados e sinalizados acima no endpoint:

```
https://api.skyhub.com.br/attributes/{name}
```

{% hint style="info" %}
É possível atualizar apenas a **label** (título do atributo na API) e as opções do atributo, o **name** (código) é mantido.
{% endhint %}

#### Request body:

```
{
  "attribute": {
    "label": "Atributo Atualizado",
    "options": [
      "foo",
      "foo",
      "foo"
    ]
  }
}
```

#### Example request:

```
curl --location --request PUT 'https://api.skyhub.com.br/attributes/Cor_Exemplo' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "attribute": {
    "label": "Cor - Exemplo Atualizado",
    "options": [
      "Azul",
      "Branco",
      "Vermelho",
      "Preto"
    ]
  }
}'
```

#### Response esperado:

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

### Atributo de produtos em pré-venda

É possível tratar através da API a criação de produtos em pré-venda, para isso teremos o atributo com a label "**dataLancamento**" no qual o value deve conter a informação da data seguindo o padrão "**DD/MM/AAAA**", conforme cURL de exemplo disponibilizado a seguir:

```
curl --location --request POST 'https://api.skyhub.com.br/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'x-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'x-accountmanager-key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
	"product": {
    "sku": "2022003",
    "name": "Produto Simples Para Pré-Venda",
    "description": "Criação de produto simples para a inclusão do atributo pré-venda",
    "status": "enabled",
    "qty": 0,
    "price": 100,
    "promotional_price": 89.99,
    "cost": 49.00,
    "weight": 3,
    "height": 1,
    "width": 1,
    "length": 1,
    "brand": "SkyHub",
    "ean": "1111333355557",
    "nbm": "22446688",
    "categories": [],
    "images": [
      "https://foo"
    ],
    "specifications": [
      {
        "key": "dataLancamento",
        "value": "31/12/2025"
      }
    ]
  }
}'
```


# Consulta URL

Esta seção mostra como consultar a URL de produtos conectados ao marketplace

Através da consulta será possível verificar todas as URLs do item, quando este estiver conectado ao marketplace Americanas.

Via API é possível consultar as URLs tanto do produto como um todo, quanto de suas variações.

{% content-ref url="/pages/-MGPuTLozabDvsj\_4sLe" %}
[URL Produtos](/produtos/outros-recursos-de-produtos/consulta-url/url-produtos)
{% endcontent-ref %}

{% content-ref url="/pages/-MGPuRl32RxS2NkD5kfy" %}
[URL Variações](/produtos/outros-recursos-de-produtos/consulta-url/url-variacoes)
{% endcontent-ref %}


# URL Produtos

Nesta guia é apresentada a consulta da URL de produtos específicos e de todos os produtos conectados

Uma vez ativo e conectado ao marketplace, é possível consultar via API a URL para o anúncio gerado para aquele SKU, assim como também é possível listar as URLs de todos os produtos da conta que foram conectados ao marketplace sem pendências e encontram-se ativos para venda.

## GET - Consultando a URL de um produto

Para realizar a consulta da URL de um SKU deve-se utilizar o método GET, preenchendo os devidos headers, no endpoint abaixo:

```
https://api.skyhub.com.br/urls/products/{SKU}
```

#### Request headers:

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### Example request:

```
curl --location -g --request GET 'https://api.skyhub.com.br/urls/products/{SKU}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]
{% endhint %}

```
{
    "sku": "SKU_02",
    "channels": [
        {
            "name": "Lojas Americanas",
            "href": "https://www.americanas.com.br/produto/6785367853?sellerId=34567899879879"
        },
        {
            "name": "Submarino",
            "href": "https://www.submarino.com.br/produto/6785367853?sellerId=34567899879879"
        },
        {
            "name": "Shoptime",
            "href": "https://www.shoptime.com.br/produto/6785367853?sellerId=34567899879879"
        }
    ],
    "variations": []
}
```

### Como consultar a URL de todos os produtos

Para realizar a consulta de todas as URLs da conta basta encaminhar via API uma requisição contendo o método GET no endpoint visto a seguir, utilizando os [headers](#request-headers) informados acima:

```
https://api.skyhub.com.br/urls/products
```

#### Example request:

```
curl --location --request GET 'https://api.skyhub.com.br/urls/products' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]: Haverá um response body listando os SKUs e suas respectivas URLs:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "channels": [],
            "variations": [
                {
                    "sku": "SKU_01A",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Submarino",
                            "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Shoptime",
                            "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                },
                {
                    "sku": "SKU_01B",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Submarino",
                            "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Shoptime",
                            "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                },
                {
                    "sku": "SKU_01C",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Submarino",
                            "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                        },
                        {
                            "name": "Shoptime",
                            "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                }
            ]
        },
        {
            "sku": "SKU_02",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/6785367853?sellerId=34567899879879"
                },
                {
                    "name": "Submarino",
                    "href": "https://www.submarino.com.br/produto/6785367853?sellerId=34567899879879"
                },
                {
                    "name": "Shoptime",
                    "href": "https://www.shoptime.com.br/produto/6785367853?sellerId=34567899879879"
                }
            ],
            "variations": []
        }
    ],
    "scroll_id": "cXVlcnlUa............wOw=="
}
```

{% hint style="warning" %}
Na consulta geral serão apresentados os 100 primeiros produtos da lista; caso a conta possua mais itens anunciados, será necessário realizar a paginação através do **scroll\_id**.&#x20;
{% endhint %}

### Como paginar a consulta da URL

Caso a conta tenha mais que 100 produtos, será necessário fazer a paginação através do **scroll\_id**, que deve ser inserido no endpoint em forma de query string.

#### Como montar a query:

Ao realizar o GET no */urls/products*, ao final da consulta será apresentado o campo **scroll\_id**, como visualizado a seguir:

```
{
  "products": [
    (...)
  ],
  "scroll_id": "cXVlcnlUa............wOw=="
}
```

Ao localizar o **scroll\_id**, basta inseri-lo como parâmetro no endpoint para que seja possível acessar a próxima página de resultados. Abaixo temos um exemplo de utilização da paginação:

#### Example request:

```
curl --location --request GET 'https://api.skyhub.com.br/urls/products?scroll_id=cXVlcnlUa............wOw==' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

A cada página o valor para o **scroll\_id** será alterado até que chegue na última, quando a requisição retornará sucesso, porém trará um *array* vazio e não mostrará mais o **scroll\_id**:

#### Response:

```
{
    "products": []
}
```

### Filtros a serem aplicados

Há a possibilidade de aplicar filtros de acordo com as marcas que constituem o marketplace Americanas, a fim de realizar a listagem das URLs a partir dos valores Lojas Americanas, Shoptime ou Submarino.

Para a aplicação do filtro, deve-se incluir a query ***?channels\[]=*** no endpoint de consulta:

```
https://api.skyhub.com.br/urls/products?channels[]={marca/canal}
```

#### Example request:

O exemplo disponibilizado a seguir utiliza o canal Lojas Americanas para aplicação do filtro:

```
curl --location -g --request GET 'https://api.skyhub.com.br/urls/products?channels[]=Lojas Americanas' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]: No retorno para a consulta acima serão visualizadas as URLs das Lojas Americanas para os SKUs da conta:
{% endhint %}

```
{
    "products": [
        {
            "sku": "SKU_01",
            "channels": [],
            "variations": [
                {
                    "sku": "SKU_01A",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                },
                {
                    "sku": "SKU_01B",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                },
                {
                    "sku": "SKU_01C",
                    "channels": [
                        {
                            "name": "Lojas Americanas",
                            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                        }
                    ]
                },
            ]
        },
        {
            "sku": "SKU_02",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/6785367853?sellerId=34567899879879"
                }
            ],
            "variations": []
        }
    ],
    "scroll_id": "cXVlcnlUaGVu.............wOw=="
}
```

{% hint style="info" %}
Também é possível aplicar o filtro por marca/canal de venda na consulta individual por SKU, como exemplo a seguir:

`https://api.skyhub.com.br/urls/products/{SKU}?channels[]=Lojas Americanas`
{% endhint %}


# URL Variações

Nesta guia é apresentada a consulta da URL de variações específicas e de todas as variações de um SKU

## GET - Consultando a URL de uma variação

Para realizar a consulta da URL de uma variação deve-se utilizar o método GET, preenchendo os devidos headers, no endpoint abaixo:

```
https://api.skyhub.com.br/urls/products/{SKU}/variations/{SKU_VARIACAO}
```

{% hint style="info" %}
Note que na URL é preciso informar dois códigos SKU, sendo:

* **SKU**: Produto pai/agrupador;
* **SKU\_VARIACAO**: Código da variação a ser consultada.
  {% endhint %}

#### Request headers:

| Key                  | Value                                       |
| -------------------- | ------------------------------------------- |
| X-User-Email         | email\_de\_usuario                          |
| X-Api-Key            | token\_de\_integracao de sua conta SkyHub   |
| X-Accountmanager-Key | token\_account único de cada Plataforma/ERP |
| Accept               | application/json                            |
| Content-Type         | application/json                            |

#### Example request:

```
curl --location -g --request GET 'https://api.skyhub.com.br/urls/products/{sku}/variations/{variation_sku}' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]
{% endhint %}

```
{
    "sku": "SKU_01A",
    "channels": [
        {
            "name": "Lojas Americanas",
            "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
        },
        {
            "name": "Submarino",
            "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
        },
        {
            "name": "Shoptime",
            "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
        }
    ]
}
```

### Como consultar as URLs das variações de um SKU

Para realizar a consulta das URLs de todas as variações de um SKU agrupador basta encaminhar via API uma requisição contendo o método GET no endpoint visto a seguir, utilizando os [headers](#request-headers) informados no início deste guia:

```
https://api.skyhub.com.br/urls/products/{SKU}/variations
```

{% hint style="info" %}
Na URL deve ser informado o **SKU pai/agrupador** cujas variações serão consultadas.&#x20;
{% endhint %}

#### Example request:

```
curl --location -g --request GET 'https://api.skyhub.com.br/urls/products/{SKU}/variations' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]
{% endhint %}

```
{
    "variations": [
        {
            "sku": "SKU_01A",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Submarino",
                    "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Shoptime",
                    "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        },
        {
            "sku": "SKU_01B",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Submarino",
                    "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Shoptime",
                    "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        },
        {
            "sku": "SKU_01C",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Submarino",
                    "href": "https://www.submarino.com.br/produto/4567845678?sellerId=34567899879879"
                },
                {
                    "name": "Shoptime",
                    "href": "https://www.shoptime.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        }
    ]
}
```

### Filtros a serem aplicados

Há a possibilidade de aplicar filtros de acordo com as marcas que constituem o marketplace Americanas, a fim de realizar a listagem das URLs a partir dos valores Lojas Americanas, Shoptime ou Submarino.

Para a aplicação de filtro, deve-se incluir a query ***?channels\[]=*** no endpoint de consulta:

```
https://api.skyhub.com.br/urls/products/{SKU}/variations?channels[]={marca/canal}
```

#### Example request:

O exemplo disponibilizado a seguir utiliza o canal Lojas Americanas para aplicação do filtro:

```
curl --location -g --request GET 'https://api.skyhub.com.br/urls/products/{SKU}/variations?channels[]=Lojas Americanas' \
--header 'X-User-Email: email_de_usuario' \
--header 'X-Api-Key: token_de_integracao de sua conta SkyHub' \
--header 'X-Accountmanager-Key: token_account único de cada Plataforma/ERP' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
```

#### Response esperado:

{% hint style="success" %}
200 - Success \[OK]: No retorno para a consulta acima serão visualizadas as URLs das Lojas Americanas para todas as variações do SKU referenciado:
{% endhint %}

```
{
    "variations": [
        {
            "sku": "SKU_01A",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        },
        {
            "sku": "SKU_01B",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        },
        {
            "sku": "SKU_01C",
            "channels": [
                {
                    "name": "Lojas Americanas",
                    "href": "https://www.americanas.com.br/produto/4567845678?sellerId=34567899879879"
                }
            ]
        }
    ]
}
```

{% hint style="info" %}
Também é possível aplicar o filtro por marca/canal de venda na consulta individual por variação, como exemplo a seguir:

`https://api.skyhub.com.br/urls/products/{SKU}/variations/{SKU_VARIACAO}?channels[]=Lojas Americanas`
{% endhint %}




---

[Next Page](/llms-full.txt/1)

