# Variações de Produto

Através da API de Variações de Produtos é possível identificar todas as variações contidas na loja virtual e identificar o produto relacionado à variação.

| Endereço para Integração |                                        |
| ------------------------ | -------------------------------------- |
| URL de Acesso            | https\://{URL\_LOJA}/web\_api/variants |
| Protocolo                | Rest/HTTP                              |

### Consultar Informações de Variação do Produto <a href="#ir-para-consultar-informacoes-de-variacao-do-produto" id="ir-para-consultar-informacoes-de-variacao-do-produto"></a>

Para retornar as informações da variação do produto, basta realizar uma requisição via GET, enviando na URL o código da variação desejada.

Veja abaixo uma chamada de exemplo para consultar informações de variação do produto:

```html
<script type="text/javascript">  
    var variantId = "5";

    $.ajax({
        method: "GET",
        url: "/web_api/variants/" + variantId
    }).done(function( response, textStatus, jqXHR ) {
        console.log(response);
    }).fail(function( jqXHR, status, errorThrown ){
        var response = $.parseJSON( jqXHR.responseText );
        console.log(response);
    });
</script>
```

Na consulta de variação do produto, a API retorna a resposta em JSON.

Abaixo um detalhamento de cada nó do JSON de resposta:

| JSON de Resposta                          | Descrição                                       |
| ----------------------------------------- | ----------------------------------------------- |
| `Variant`                                 | Dados da Variação do Produto                    |
| `Variant.ean`                             | EAN da Variação do Produto                      |
| `Variant.id`                              | Código da Variação do Produto                   |
| `Variant.product_id`                      | Código do Produto                               |
| `Variant.price`                           | Preço da Variação do Produto                    |
| `Variant.promotional_price`               | Preço Promocional da Variação do Produto        |
| `Variant.start_promotion`                 | Data Inicial da Promoção da Variação do Produto |
| `Variant.end_promotion`                   | Data Final da Promoção da Variação do Produto   |
| `Variant.payment_option`                  | Informações de Pagamento                        |
| `Variant.illustrative_image`              | Imagem Ilustrativa da Variação do Produto       |
| `Variant.VariantImage[]`                  | Imagens da Variação do Produto                  |
| `Variant.VariantImage[].http`             | URL Simples da Imagem da Variação do Produto    |
| `Variant.VariantImage[].https`            | URL Segura da Imagem da Variação do Produto     |
| `Variant.VariantImage[].thumbs`           | Miniaturas da Imagem da Variação do Produto     |
| `Variant.VariantImage[].thumbs.30`        | Miniatura de Tamanho 30px                       |
| `Variant.VariantImage[].thumbs.30.http`   | URL Simples da Miniatura de 30px                |
| `Variant.VariantImage[].thumbs.30.https`  | URL Segura da Miniatura de 30px                 |
| `Variant.VariantImage[].thumbs.90`        | Miniatura de Tamanho 90px                       |
| `Variant.VariantImage[].thumbs.90.http`   | URL Simples da Miniatura de 90px                |
| `Variant.VariantImage[].thumbs.90.https`  | URL Segura da Miniatura de 90px                 |
| `Variant.VariantImage[].thumbs.180`       | Miniatura de Tamanho 180px                      |
| `Variant.VariantImage[].thumbs.180.http`  | URL Simples da Miniatura de 180px               |
| `Variant.VariantImage[].thumbs.180.https` | URL Segura da Miniatura de 180px                |
| `Variant.Sku[]`                           | Sku da Variação do Produto                      |
| `Variant.Sku[].type`                      | Tipo da Variação do Produto                     |
| `Variant.Sku[].value`                     | Dados da Variação do Produto                    |

Exemplo de resposta com sucesso baseando no envio do exemplo acima:

```json
{
    "Variant": {
        "id": "184",
        "ean": "",
        "product_id": "610",
        "price": "199.90",
        "start_promotion": "0000-00-00",
        "end_promotion": "0000-00-00",
        "promotional_price": "0.00",
        "payment_option": "ou 12x com juros de R$ 18,89",
        "illustrative_image": "",
        "VariantImage": [
            {
                "http": "http://images.tcdn.com.br/img/img_prod/123/1.png",
                "https": "https://images.tcdn.com.br/img/img_prod/123/1.png",
                "thumbs": {
                    "30": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/30_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/30_1.png"
                    },
                    "90": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/90_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/90_1.png"
                    },
                    "180": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/180_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/180_1.png"
                    }
                }
            }
        ],
        "Sku": [
            {
                "type": "Cor",
                "value": "Verde"
            },
            {
                "type": "Tamanho",
                "value": "G"
            }
        ]
    }
} 
```

### Listagem de Variações do Produto <a href="#ir-para-listagem-de-variacoes-do-produto" id="ir-para-listagem-de-variacoes-do-produto"></a>

Para a listagem de variações do produto, deverá ser realizada uma requisição via GET.

Podem ser enviados alguns parâmetros nesta integração para realizar filtros na listagem de variações de produtos, segue abaixo o dado necessário para envio:

| Dados de Entrada | Obrig. | Descrição                      |
| ---------------- | ------ | ------------------------------ |
| `id`             | Não    | Código do Produto              |
| `sort`           | Não    | Ordenação da Consulta          |
| `limit`          | Não    | Quantidade Limite de Registros |
| `page`           | Não    | Página da Consulta             |

Veja abaixo uma chamada de exemplo para a listagem de variações de produtos:

```html
<script type="text/javascript">  
    var params = {};

    params["page"] = "1";
    params["limit"] = "5";

    $.ajax({
        method: "GET",
        url: "/web_api/variants/",
        data: params
    }).done(function( response, textStatus, jqXHR ) {
        console.log(response);
    }).fail(function( jqXHR, status, errorThrown ){
        var response = $.parseJSON( jqXHR.responseText );
        console.log(response);
    });
</script>
```

Na listagem de variações de produtos, a API retorna a resposta em JSON.

Abaixo um detalhamento de cada nó do JSON de resposta:

| JSON de Resposta                                     |                                                 |
| ---------------------------------------------------- | ----------------------------------------------- |
| `paging`                                             | Dados do Produto                                |
| `paging.total`                                       | Total de Registros                              |
| `paging.page`                                        | Páginas corrente                                |
| `paging.offset`                                      | Registro Inicial da Página                      |
| `paging.limit`                                       | Limite de Registros                             |
| `paging.maxLimit`                                    | Máximo de Registros                             |
| `sort`                                               | Ordenação                                       |
| `availableFilters`                                   | Filtros Disponíveis                             |
| `appliedFilters`                                     | Filtros Utilizados                              |
| `Variants[]`                                         | Lista de Produtos                               |
| `Variants[].Variant`                                 | Dados da Variação do Produto                    |
| `Variants[].Variant.ean`                             | EAN da Variação do Produto                      |
| `Variants[].Variant.id`                              | Código da Variação do Produto                   |
| `Variants[].Variant.product_id`                      | Código do Produto                               |
| `Variants[].Variant.price`                           | Preço da Variação do Produto                    |
| `Variants[].Variant.promotional_price`               | Preço Promocional da Variação do Produto        |
| `Variants[].Variant.start_promotion`                 | Data Inicial da Promoção da Variação do Produto |
| `Variants[].Variant.end_promotion`                   | Data Final da Promoção da Variação do Produto   |
| `Variants[].Variant.payment_option`                  | Informações de Pagamento                        |
| `Variants[].Variant.illustrative_image`              | Imagem Ilustrativa da Variação do Produto       |
| `Variants[].Variant.VariantImage[]`                  | Imagens da Variação do Produto                  |
| `Variants[].Variant.VariantImage[].http`             | URL Simples da Imagem da Variação do Produto    |
| `Variants[].Variant.VariantImage[].https`            | URL Segura da Imagem da Variação do Produto     |
| `Variants[].Variant.VariantImage[].thumbs`           | Miniaturas da Imagem da Variação do Produto     |
| `Variants[].Variant.VariantImage[].thumbs.30`        | Miniatura de Tamanho 30px                       |
| `Variants[].Variant.VariantImage[].thumbs.30.http`   | URL Simples da Miniatura de 30px                |
| `Variants[].Variant.VariantImage[].thumbs.30.https`  | URL Segura da Miniatura de 30px                 |
| `Variants[].Variant.VariantImage[].thumbs.90`        | Miniatura de Tamanho 90px                       |
| `Variants[].Variant.VariantImage[].thumbs.90.http`   | URL Simples da Miniatura de 90px                |
| `Variants[].Variant.VariantImage[].thumbs.90.https`  | URL Segura da Miniatura de 90px                 |
| `Variants[].Variant.VariantImage[].thumbs.180`       | Miniatura de Tamanho 180px                      |
| `Variants[].Variant.VariantImage[].thumbs.180.http`  | URL Simples da Miniatura de 180px               |
| `Variants[].Variant.VariantImage[].thumbs.180.https` | URL Segura da Miniatura de 180px                |
| `Variants[].Variant.Sku[]`                           | Sku da Variação do Produto                      |
| `Variants[].Variant.Sku[].type`                      | Tipo da Variação do Produto                     |
| `Variants[].Variant.Sku[].value`                     | Dados da Variação do Produto                    |

Exemplo de resposta com sucesso baseando no envio do exemplo acima:

```json
{
    "paging": {
        "total": 105,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "product_id",
        "ean",
        "price",
        "promotional_price",
        "modified"
    ],
    "appliedFilters": [],
    "Variants": [
        {
            "Variant": {
                "id": "182",
                "ean": "",
                "product_id": "610",
                "price": "199.90",
                "start_promotion": "0000-00-00",
                "end_promotion": "0000-00-00",
                "promotional_price": "0.00",
                "payment_option": "ou 12x com juros de R$ 18,89",
                "illustrative_image": "",
                "Sku": [
                    {
                        "type": "Cor",
                        "value": "Verde"
                    },
                    {
                        "type": "Tamanho",
                        "value": "P"
                    }
                ]
            }
        }
    ]
}
```

### Attrs <a href="#ir-para-attrs" id="ir-para-attrs"></a>

Caso deseje exibir apenas alguns atributos da API, pode-se utilizar o parâmetro `attrs`

O parâmetro Attrs deve ser passado pela url da requisição da API, nela você deve passar os atributos da qual deseja exibir separados por (,).

**Exemplo:**

```
   https://{URL_LOJA}/web_api/variants?attrs=Variant.price,Variant.payment_option_details
```

Terá como resposta o conteúdo abaixo:

```json
"Variants": [
    {
      "Variant": {
        "id": "9",
        "product_id": "8",
        "price": "40.00",
        "payment_option_details": [
          {
            "display_name": "Boleto - TrayCheckout",
            "plots": "1",
            "value": "38.80"
          }
        ]
      }
    },
```

Abaixo um exemplo de utilização desse parâmetro:

```javascript
  var params = {};
  params["attrs"] = "Variant.price,Variant.payment_option_details";

  $.ajax({
    method: "GET",
    url: "/web_api/variants/",
    data: params
  }).done(function( response, textStatus, jqXHR ) {
    console.log(response);
  }).fail(function( jqXHR, status, errorThrown ){
    var response = $.parseJSON( jqXHR.responseText );
    console.log(response);
  });
```

Para mais detalhes sobre a API de variações de produto acesse o link da documentação <https://developers.tray.com.br/?java#listagem-de-variacoes-get>


---

# Agent Instructions: Querying This Documentation

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

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

```
GET https://partners.tray.com.br/themes/construindo-seu-template/apis-disponiveis/variacoes-de-produto.md?ask=<question>
```

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

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