Produtos¶
Um produto é o objeto central quando falamos do portfólio, esse objeto contém informações descritivas a respeito do SKU (Stock Keeping Unit) que será disponibilizado.
SKU (Stock Keeping Unit)¶
Quando falamos de produto estamos falando de um termo que pode ser facilmente confundido, já que sua utilização é bem ampla no mercado, podendo tratar de um único produto, um produto com várias variações, anúncios, ofertas, etc. Quando estivermos falando de produto na solução Portfólio, estaremos tratando mais do SKU em sí, mas o que é o SKU?
O SKU, sigla para Stock Keeping Unit, se trata de um identificador único de um produto e também pode ser utilizado para identificação da unidade de produto nos estoques. Um exemplo de SKU seria de uma camiseta, podemos identificar essa unidade de produto pela sua cor e seu tamanho gerando um SKU como por exemplo: CAMISETA_BRANCA_P
.
Variação de produtos¶
No mundo real sabemos que podemos ter um produto com diferentes variações, ou seja, pegando como exemplo uma camiseta qualquer vamos poder ter as variações dela em tamanhos P, M ou G. Pensando nisso disponibilizamos na nossa solução um campo chamado de variation_key
que serve para amarrar produtos com suas variações.
A chave de variação pode ser qualquer uma desde que seja única para aquela variação. Retornando ao exemplo das camisetas, poderiamos utilizar um variation_key
como por exemplo CAMISETAS_PMG
e todos os SKUs que pertencerem à variação deveriam referenciar esse mesmo variation_key
, assim é recomendado para que seja possível usufruir de uma boa experiência de toda a solução.
Criar uma posição de produto¶
Descrever um produto que será disponibilizado no portfólio.
Aviso
Ao criar um produto, você receberá o código 201 - Created
. Caso seja enviado o mesmo UUID como parâmetro na URL, o retorno deverá ser o código 303 - See Other
. Se você estiver recebendo o código 200 - OK
é porque está sendo realizado o redirecionamento automático, mas o produto não foi atualizado. Para mais informações, consulte Códigos de retorno.
Escopo requerido
Valor | Descrição |
---|---|
open:portfolio:write |
Permite gerenciar os SKUs |
Parâmetros da URL
Campo | Tipo | Descrição | Obrigatório |
---|---|---|---|
id |
uuid4 | Identificação do produto | Sim |
Parâmetros da chamada
Propriedade | Tipo | Descrição | Obrigatório | Tamanho |
---|---|---|---|---|
code |
string | Código SKU do produto. | Sim | Min 1 carácter. Max 50 caracteres. |
title |
object | Objeto contendo o título em diferentes linguas. | Sim | - |
title.{language} |
string | Título do SKU, language precisa precisa seguir o padrão ISO 639-1/2 (ex. pt_BR ) |
Sim | Min 1 carácter. Max 150 caracteres. |
variation_key |
string | Código do SKU pai. Quando não houver um valor você poderá enviar '' . |
Sim | Max 50 caracteres. |
condition |
enum | Condição do SKU. Somente são aceitos os valores:
|
Sim | - |
brand |
string | Marca do produto. | Sim | Min 1 carácter. Max 70 caracteres. |
tags |
array | Palavras chaves do SKU. Quando não houver um valor você poderá enviar [] . |
Sim | Min 1 carácter. Max 100 caracteres (por tag). |
available |
boolean | Disponibilidade da publicação. | Sim | - |
origin |
enum | Origem do produto. Os valores aceitos são:
|
Sim | - |
datasheet |
object | Fichas técnicas do produto. Quando não houver um valor você poderá enviar {} . |
Sim | - |
datasheet.reference |
URL | URL referente à ficha técnica | Não | - |
dimensions |
array | Dimensões do produto, mais informações | Sim | - |
dimensions[].name |
enum | Nome da dimensão. Serão Aceito os seguintes valores:
|
Sim | - |
dimensions[].height |
object | Altura | Sim | - |
dimensions[].height.value |
float | Valor da altura | Sim | Min 1 carácter. Max 10 caracteres. |
dimensions[].height.unit |
enum | Unidade da altura. Serão Aceito os seguintes valores:
|
Sim | - |
dimensions[].width |
object | Largura | Sim | - |
dimensions[].width.value |
float | Valor da largura | Sim | Min 1 carácter. Max 10 caracteres. |
dimensions[].width.unit |
enum | Unidade da largura. Serão Aceito os seguintes valores:
|
Sim | - |
dimensions[].length |
object | Comprimento | Sim | - |
dimensions[].length.value |
float | Valor do comprimento | Sim | Min 1 carácter. Max 10 caracteres. |
dimensions[].length.unit |
enum | Unidade do comprimento. Serão Aceito os seguintes valores:
|
Sim | - |
dimensions[].weight |
object | Peso | Sim | - |
dimensions[].weight.value |
float | Valor do peso | Sim | Min 1 carácter. Max 10 caracteres. |
dimensions[].weight.unit |
enum | Unidade do peso. Serão Aceito os seguintes valores:
|
Sim | - |
description |
object | Objeto contendo a descrição do produto em diferentes linguas. Quando não houver um valor você poderá enviar {} . |
Sim | - |
description.{language} |
string | Descrição do produto, language precisa precisa seguir o padrão ISO 639-1/2 (ex. pt_BR ) |
Não | - |
description.{language}.verbose_value |
string | Descrição verbosa do produto. | Não | Min 1 carácter |
description.{language}.simplified_value |
string | Descrição simplificada do produto. Quando não houver um valor você poderá enviar '' |
Não | Max 1000 caracteres. |
identifiers |
array | Identificadores do produto. Quando não houver um valor você poderá enviar [] . |
Sim | - |
identifiers[].type |
enum | Tipo do identificador. Será validado a quantidade de números dos seguintes tipos:
É permitido enviar um valor que não está nesta lista, porém não será validada a numeração. |
Não | Min 1 carácter. |
identifiers[].value |
string | Valor do identificador. Será validado a quantidade de números dos tipos de identificadores. | Não | EAN - 8, 12, 13 ou 14 números ISBN - 13 números UPC - 8 ou 12 númerosNCM - 8 ou 10 números |
attributes |
object | Atributos do produto. Quando não houver um valor você poderá enviar {} . |
Sim | - |
attributes.variant |
array | Atributos variante do produto. Quando não houver um valor você poderá enviar [] . |
Não | - |
attributes.variant[].name |
string | Nome variante do atributo | Não | Min 1 carácter. |
attributes.variant[].value |
string | Valor variante do atributo | Não | Min 1 carácter. |
attributes.variant[].display |
object | Objeto contendo o valor para exibir do atributo em diferentes linguas. Quando não houver um valor você poderá enviar {} . |
Não | - |
attributes.variant[].display.{language} |
string | Valor para exibir do atributo, language precisa precisa seguir o padrão ISO 639-1/2 (ex. pt_BR ) |
Não | - |
attributes.variant[].display.{language}.name |
string | Nome variante do atributo a ser exibido | Não | Min 1 carácter. |
attributes.variant[].display.{language}.value |
string | Valor variante do atributo a ser exibido | Não | Min 1 carácter. |
attributes.variant[].display.{language}.simplified_value |
string | Valor variante simplificado do atributo a ser exibido. Quando não houver um valor você poderá enviar '' . |
Não | - |
attributes.optional |
array | Atributos opcionais do produto. Quando não houver um valor você poderá enviar [] . |
Não | - |
attributes.optional[].name |
string | Nome opcional do atributo | Não | Min 1 carácter. |
attributes.optional[].value |
string | Valor opcional do atributo | Não | Min 1 carácter. |
attributes.optional[].display |
object | Objeto contendo o valor para exibir do atributo em diferentes linguas. Quando não houver um valor você poderá enviar {} . |
Não | - |
attributes.optional[].display.{language} |
string | Valor para exibir do atributo, language precisa precisa seguir o padrão ISO 639-1/2 (ex. pt_BR ) |
Não | - |
attributes.optional[].display.{language}.name |
string | Nome opcional do atributo a ser exibido | Não | Min 1 carácter. |
attributes.optional[].display.{language}.value |
string | Valor opcional do atributo a ser exibido | Não | Min 1 carácter. |
attributes.optional[].display.{language}.simplified_value |
string | Valor opcional simplificado do atributo a ser exibido. Quando não houver um valor você poderá enviar '' |
Não | - |
medias |
array | Mídias do produto. Quando não houver um valor você poderá enviar [] . |
Sim | - |
medias[].name |
string | Nome da mídia | Não | Min 1 carácter. Max 50 caracteres. |
medias[].type |
string | Tipo da mídia | Não | Min 1 carácter. |
medias[].reference |
URL | URL de referência da mídia | Não | - |
extras |
object | Informações adicionais sobre o SKU. Quando não houver um valor você poderá enviar {} . |
Sim | - |
Informativo
O campo dimensions
é uma lista de itens com as suas respectivas dimensões. E é necessário que um desses itens seja o pacote. Para isso informe package
na chave name
e especifique os valores para height
, width
, length
e weight
.
Chamada:
curl -X 'PUT' \
'https://api.magalu.com/v0/portfolios/skus/{id}' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Access Token>' \
-H 'Content-Type: application/json' \
-d '{
"code": "123-abc-4",
"title": {
"pt_BR": "O que a vida me ensinou"
},
"variation_key": "123-abc-4",
"condition": "new",
"brand": "apple",
"datasheet": {
"reference": "https://api.magalu.com/datasheets/97885021802085cb3e35b-a497-3d6e-a8a7-4fa34b024c45"
},
"description": {
"pt_BR": {
"verbose_value": "No sexto livro da Coleção O que a vida me ensinou",
"simplified_value": "No sexto livro da Coleção O que a vida me ensinou..."
}
},
"tags": [
"auto-ajuda",
"negocios"
],
"dimensions": [
{
"name": "package",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
},
{
"name": "product",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
}
],
"identifiers": [
{
"type": "ean",
"value": "7891118012282"
}
],
"attributes": {
"variant": [
{
"name": "color",
"value": "white",
"display": {
"pt_BR": {
"name": "Cor",
"value": "Branco",
"simplified_value": "Branco"
}
}
},
{
"name": "internal_memory",
"value": "256gb",
"display": {
"pt_BR": {
"name": "Memória interna",
"value": "256GB",
"simplified_value": "Memória interna"
}
}
}
],
"optional": [
{
"name": "processor",
"value": "a14",
"display": {
"pt_BR": {
"name": "Processador",
"value": "A14",
"simplified_value": "Processador"
}
}
},
{
"name": "operational_system",
"value": "ios",
"display": {
"pt_BR": {
"name": "Sistema operacional",
"value": "iOS",
"simplified_value": "Sistema operacional"
}
}
}
]
},
"medias": [
{
"name": "book_cover_1",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_2",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_3",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "author_interview",
"type": "embedded",
"reference": "https://youtube.com/watch?v=deadbeef"
}
],
"available": true,
"origin": "national",
"extras": {}
}'
Resposta:
{
"id": "a11d50a5-31c1-4e9d-bbe3-27a59f944508",
"created_at": "2022-06-15T14:25:37Z",
"code": "123-abc-4",
"title": {
"pt_BR": "O que a vida me ensinou"
},
"variation_key": "123-abc-4",
"condition": "new",
"brand": "apple",
"datasheet": {
"reference": "https://api.magalu.com/datasheets/97885021802085cb3e35b-a497-3d6e-a8a7-4fa34b024c45"
},
"description": {
"pt_BR": {
"verbose_value": "No sexto livro da Coleção O que a vida me ensinou",
"simplified_value": "No sexto livro da Coleção O que a vida me ensinou..."
}
},
"tags": [
"auto-ajuda",
"negocios"
],
"dimensions": [
{
"name": "package",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
},
{
"name": "product",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
}
],
"identifiers": [
{
"type": "ean",
"value": "7891118012282"
}
],
"attributes": {
"variant": [
{
"name": "color",
"value": "white",
"display": {
"pt_BR": {
"name": "Cor",
"value": "Branco",
"simplified_value": "Branco"
}
}
},
{
"name": "internal_memory",
"value": "256gb",
"display": {
"pt_BR": {
"name": "Memória interna",
"value": "256GB",
"simplified_value": "Memória interna"
}
}
}
],
"optional": [
{
"name": "processor",
"value": "a14",
"display": {
"pt_BR": {
"name": "Processador",
"value": "A14",
"simplified_value": "Processador"
}
}
},
{
"name": "operational_system",
"value": "ios",
"display": {
"pt_BR": {
"name": "Sistema operacional",
"value": "iOS",
"simplified_value": "Sistema operacional"
}
}
}
]
},
"medias": [
{
"name": "book_cover_1",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_2",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_3",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "author_interview",
"type": "embedded",
"reference": "https://youtube.com/watch?v=deadbeef"
}
],
"available": true,
"origin": "national",
"extras": {}
}
Códigos de retorno
Nota
Para maiores informações sobre códigos de retorno, Código de retorno.
Código | Descrição |
---|---|
201 | Created |
303 | See Other |
401 | Unauthorized |
403 | Forbidden |
422 | Unprocessable Entity |
500 | Internal Server Error |
502 | Bad Gateway |
503 | Service Unavailable |
504 | Gateway Timeout |
Atualizar uma posição de produto¶
No portfólio usamos dois campos que merecem atenção ao atualizar uma posição de produto, o code
e o id
. O code
representa o código do SKU, ele é permanente. O id
é o identificador do SKU e pode ser modificado. É importante não confundi-los no processo de atualização de uma posição de SKU. Para garantir a rastreabilidade de todas as mudanças nas informações de um SKU, o sistema não permite que os dados de um registro sejam alterados, ou seja, sempre que precisar fazer alguma alteração de um SKU é necessário criar um novo registro do mesmo. Podemos ter então múltiplos registros sobre um único SKU. Estes registros tem id
diferentes, mas o mesmo code
. O registro vigente será o mais recente.
Recuperar um produto¶
Retornar um produto em específico.
Escopo requerido
Valor | Descrição |
---|---|
open:portfolio:read |
Permite acessar um SKU |
Parâmetros da URL
Campo | Tipo | Descrição | Obrigatório |
---|---|---|---|
id |
uuid4 | Identificação do produto | Sim |
Chamada:
curl -X 'GET' \
'https://api.magalu.com/v0/portfolios/skus/{id}' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Access Token>' \
-H 'Content-Type: application/json' \
Resposta:
{
"id": "a11d50a5-31c1-4e9d-bbe3-27a59f944508",
"created_at": "2022-06-15T14:25:37Z",
"code": "123-abc-4",
"title": {
"pt_BR": "O que a vida me ensinou"
},
"variation_key": "123-abc-4",
"condition": "new",
"brand": "apple",
"datasheet": {
"reference": "https://api.magalu.com/datasheets/97885021802085cb3e35b-a497-3d6e-a8a7-4fa34b024c45"
},
"description": {
"pt_BR": {
"verbose_value": "No sexto livro da Coleção O que a vida me ensinou",
"simplified_value": "No sexto livro da Coleção O que a vida me ensinou..."
}
},
"tags": [
"auto-ajuda",
"negocios"
],
"dimensions": [
{
"name": "package",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
},
{
"name": "item",
"height": {
"value": 120,
"unit": "cm"
},
"width": {
"value": 100,
"unit": "cm"
},
"length": {
"value": 110,
"unit": "cm"
},
"weight": {
"value": 170,
"unit": "g"
}
}
],
"identifiers": [
{
"type": "isbn",
"value": "9788502180208"
},
{
"type": "isbn_10",
"value": "8502180207"
},
{
"type": "isbn_13",
"value": "9788502180208"
},
{
"type": "gtin_13",
"value": "9788502180208"
},
{
"type": "moid",
"value": "089099300"
}
],
"attributes": {
"variant": [
{
"name": "color",
"value": "white",
"display": {
"pt_BR": {
"name": "Cor",
"value": "Branco",
"simplified_value": "Branco"
}
}
},
{
"name": "internal_memory",
"value": "256gb",
"display": {
"pt_BR": {
"name": "Memória interna",
"value": "256GB",
"simplified_value": "Memória interna"
}
}
}
],
"optional": [
{
"name": "brand",
"value": "apple",
"display": {
"pt_BR": {
"name": "Marca",
"value": "Apple",
"simplified_value": "Marca"
}
}
},
{
"name": "processor",
"value": "a14",
"display": {
"pt_BR": {
"name": "Processador",
"value": "A14",
"simplified_value": "Processador"
}
}
},
{
"name": "operational_system",
"value": "ios",
"display": {
"pt_BR": {
"name": "Sistema operacional",
"value": "iOS",
"simplified_value": "Sistema operacional"
}
}
}
]
},
"medias": [
{
"name": "book_cover_1",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_2",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_3",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "author_interview",
"type": "embedded",
"reference": "https://youtube.com/watch?v=deadbeef"
}
],
"available": true,
"origin": "national",
"extras": {}
}
Códigos de retorno
Nota
Para maiores informações sobre códigos de retorno, Código de retorno.
Código | Descrição |
---|---|
200 | Ok |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
422 | Unprocessable Entity |
500 | Internal Server Error |
502 | Bad Gateway |
503 | Service Unavailable |
504 | Gateway Timeout |
Recuperar uma lista de produtos¶
Retorna todos os produtos disponíveis.
Nota
Este endpoint implementa paginação, ordenação e filtros. Para saber mais, consulte Fazer solicitações paginadas e parâmetros de consulta.
Escopo requerido
Valor | Descrição |
---|---|
open:portfolio:read |
Permite listar os SKUs |
Parâmetros de consulta
Campo | Tipo | Descrição | Obrigatório |
---|---|---|---|
code__in |
string | Retorna os produtos com os códigos listados | Não |
variation_key |
string | Retorna as variações de produto de uma amarração | Não |
variation_key__in |
string | Retorna as variações de produto de várias amarrações | Não |
Parâmetros de ordenação
Campo | Descrição | Obrigatório |
---|---|---|
created_at |
Ordernar por data de criação dos skus. | Não |
Chamada:
curl -X 'GET' \
'https://api.magalu.com/v0/portfolios/skus' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <Access Token>' \
-H 'Content-Type: application/json' \
Resposta:
{
"meta": {
...
},
"results": [
{
"id": "a11d50a5-31c1-4e9d-bbe3-27a59f944508",
"created_at": "2022-06-15T14:25:37Z",
"code": "123-abc-4",
"title": {
"pt_BR": "O que a vida me ensinou"
},
"variation_key": "123-abc-4",
"condition": "new",
"brand": "apple",
"medias": [
{
"name": "book_cover_1",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_2",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "book_cover_3",
"type": "image/jpeg",
"reference": "https://api.magalu.com/livro-o-que-a-vida/8cb51075ef9143001982f2914180fc0b.jpg"
},
{
"name": "author_interview",
"type": "embedded",
"reference": "https://youtube.com/watch?v=deadbeef"
}
]
}
]
}
Códigos de retorno
Nota
Para maiores informações sobre códigos de retorno, Código de retorno.
Código | Descrição |
---|---|
200 | OK |
400 | Bad Request |
401 | Unauthorized |
403 | Forbidden |
422 | Unprocessable Entity |
500 | Internal Server Error |
502 | Bad Gateway |
503 | Service Unavailable |
504 | Gateway Timeout |