> For the complete documentation index, see [llms.txt](https://desenvolvedores.skyhub.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://desenvolvedores.skyhub.com.br/multi-cd/estoque-multi-origem.md).

# Criação e Atualização de Estoque

{% hint style="danger" %}
**O fluxo descrito a seguir&#x20;**<mark style="color:red;">**não deve ser realizado para o CD padrão**</mark>**, cujo ID será igual a "98",&#x20;**<mark style="color:red;">**caso os produtos cadastrados em conta possuam estoque inserido diretamente em suas estruturas**</mark>**.**

O CD de ID 98, padrão de todas as contas, sempre será atualizado com o estoque presente na **estrutura do produto**, isto é, tanto o estoque quanto o *crossdocking* desse CD padrão levarão em consideração os atributos dos produtos atualizados pelo endpoint [/products](https://desenvolvedores.skyhub.com.br/integracao-produtos/atualizacao-produto/produto-simples), se for um produto simples, ou [/variations](https://desenvolvedores.skyhub.com.br/integracao-produtos/atualizacao-produto/produto-variavel), caso seja um produto com variações.

Caso um SKU receba estoque pelo fluxo descrito abaixo **E** através da estrutura vista em `/products` e/ou `/variations`, o valor **presente na estrutura será indexado ao marketplace**, sobrepondo a quantidade encaminhada pelo `/stores`.&#x20;

Para que não ocorram vendas indevidas e divergências de estoque, é necessário utilizar apenas uma forma de criação/atualização deste atributo.&#x20;
{% endhint %}

Diferente das chamadas para criação, atualização e consulta da warehouse (CD) que requerem a utilização do Bearer Token, a manipulação de estoque dos CDs utiliza os headers padronizados na API e visualizados a seguir:

#### 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                            |

## **POST - Criando o estoque**

Após a criação do CD é necessário também criar o estoque dos produtos vinculados a ele.

O processo de criação de estoque se dá através de um POST, preenchendo os [headers](#request-headers) padronizados, para o endpoint abaixo:&#x20;

```
https://api.skyhub.com.br/stores/{store_code}/skus
```

{% hint style="info" %}
O campo `store_code` deverá ser substituído pelo **código do CD**, definido em sua criação.
{% endhint %}

#### **Request body:**

```
{
    "sku": {
        "code": "{SKU}",
        "qty": 0,
        "cross_docking": 0
    }
}
```

#### **Example request:**

```
curl --location --request POST 'https://api.skyhub.com.br/stores/loja1/skus' \
--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 '{
    "sku": {
        "code": "2023001",
        "qty": 17,
        "cross_docking": 0
    }
}'
```

#### Response esperado:

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

## **PUT - Atualizando o estoque**

Após vincular o estoque de um item a um CD, as atualizações desse estoque devem ser realizadas através do método PUT, preenchendo os [headers](#request-headers) padronizados, para o endpoint abaixo:&#x20;

```
https://api.skyhub.com.br/stores/{store_code}/skus/{SKU}
```

#### **Request body:**

```
{
    "store_id": "{store_code}",
    "sku_code": "{SKU}",
    "sku": {
        "qty": 10,
        "cross_docking": 0
    }
}
```

#### **Example request:**

```
curl --location --request PUT 'https://api.skyhub.com.br/stores/loja1/skus/2023001' \
--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 '{
    "store_id": "loja1",
    "sku_code": "2023001",
    "sku": {
        "qty": 10,
        "cross_docking": 0
    }
}'
```

#### Response esperado:

{% hint style="success" %}
204 \[Success] - No content
{% endhint %}

## POST - Criando/atualizando estoque em lote

Uma vez que a loja pode conter muitos produtos e CDs, torna-se inviável criar ou atualizar o estoque dos itens individualmente. Neste caso, é possível realizar estas ações (de criação e atualização) em lote (*batch*).

{% hint style="info" %}
A criação/atualização de estoque em lote permite a alteração de **500 SKUs** por requisição.&#x20;
{% endhint %}

Para a criação/atualização de estoque em *batch* basta utilizar o método POST, preenchendo os [headers](#request-headers) padronizados, para o endpoint abaixo:

```
https://api.skyhub.com.br/stores/{store_code}/batch
```

#### **Request body:**

```
{
    "skus": [
        {
            "code": "{SKU}",
            "qty": 1,
            "cross_docking": 0
        },
        {
            "code": "{SKU}",
            "qty": 1,
            "cross_docking": 0
        }
    ]
}
```

#### **Example request:**

```
curl --location --request POST 'https://api.skyhub.com.br/stores/loja1/batch' \
--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 '{
    "skus": [
        {
            "code": "2023001",
            "qty": 1,
            "cross_docking": 0
        },
        {
            "code": "2023600",
            "qty": 1,
            "cross_docking": 0
        },
        {
            "code": "2023200",
            "qty": "I",
            "cross_docking": 5
        }
    ]
}'
```

{% hint style="warning" %}
Na requisição acima, para o SKU **2023200** propositalmente foi adicionada uma **string** para o campo "***qty***". O erro foi cometido para exemplificação do response visualizado logo abaixo.
{% endhint %}

#### Response esperado:

{% hint style="success" %}
207 \[Success] - Multi Status: O retorno trará um resumo do resultado das ações realizadas:&#x20;
{% endhint %}

```
{
    "data": [
        {
            "code": "2023001",
            "status": 200
        },
        {
            "code": "2023600",
            "error": "Não foi possível encontrar Sku: 2023600",
            "status": 404
        },
        {
            "code": "2023200",
            "errors": [
                {
                    "attribute": "qty",
                    "error_message": "não é válido"
                }
            ],
            "status": 422
        }
    ],
    "metadata": {
        "failures": 2,
        "success": 1,
        "total": 3
    }
}
```
