Skip to content

Estrutura do item

Um Item é a entidade central de catálogo que representa um produto, recorrência (assinatura) ou presente. Cada item contém variantes (SKUs), atributos, imagens, conteúdo e informações de envio.

{
  "id": "698b8a825eaf8de7c5af8de7",
  "kind": "product",
  "name": "Camiseta Premium",
  "caption": "Camiseta 100% algodão de alta qualidade",
  "alias": "camiseta-premium-001",
  "active": true,
  "published": true,
  "shippable": true,
  "digital": false,
  "currency": "BRL",
  "community": "test",
  "supplierId": null,
  "formId": null,
  "requiresApproval": false,
  "createdAt": "2026-02-10T19:44:02.328Z",
  "updatedAt": "2026-02-12T20:46:11.133Z",
  "skus": [
    {
      "_id": "sku-001-blue-m",
      "alias": "#AB1234",
      "name": "Camiseta Premium - Azul M",
      "caption": "Azul | M",
      "price": {
        "amount": 9900,
        "currency": "BRL"
      },
      "priceFrom": {
        "amount": 12900,
        "currency": "BRL"
      },
      "inventoryId": "698b8a805eaf8de7c5af1cd0",
      "attributes": [
        {
          "key": "color",
          "value": "blue"
        },
        {
          "key": "size",
          "value": "M"
        }
      ],
      "gallery": [],
      "reference": null,
      "plan": null
    }
  ],
  "options": [
    {
      "_id": "color",
      "name": "Cor",
      "caption": "Escolha a cor",
      "options": [
        { "name": "Azul" },
        { "name": "Vermelho" },
        { "name": "Preto" }
      ]
    },
    {
      "_id": "size",
      "name": "Tamanho",
      "caption": "Escolha o tamanho",
      "options": [
        { "name": "P" },
        { "name": "M" },
        { "name": "G" },
        { "name": "GG" }
      ]
    }
  ],
  "package": {
    "weight": 300,
    "width": 30,
    "height": 40,
    "depth": 10
  },
  "gallery": [
    {
      "url": "https://cdn.layers.digital/uploads/.../camiseta-azul-1.jpg",
      "path": "/uploads/.../camiseta-azul-1.jpg",
      "mime": "image/jpeg",
      "width": 1200,
      "height": 1600,
      "size": 245680,
      "name": "camiseta-azul-1.jpg",
      "orientation": null
    }
  ],
  "tags": ["camiseta", "moda", "promoção"],
  "categories": ["vestuário", "masculino"],
  "content": [
    {
      "kind": "markdown",
      "markdown": "# Descrição do Produto\n\nCamiseta premium de algodão 100% com excelente durabilidade..."
    }
  ],
  "stats": {
    "channels": []
  },
  "observations": [],
  "magnetic": null
}

Campos principais

CampoTipoDescrição
idstringID único do item
kindstringTipo do item. Valores possíveis: product, recurrence, gift
namestringNome do item (3-100 caracteres, obrigatório)
captionstringDescrição curta do item (0-100 caracteres)
aliasstring | nullID customizado único do item. Caso não informado, null
activebooleanIndica se o item está ativo (padrão: true)
publishedbooleanIndica se o item está publicado e visível (padrão: true)
shippablebooleanIndica se o item pode ser enviado/entregue (padrão: false)
digitalboolean | nullIndica se é um produto digital. Caso não informado, null
currencystringMoeda no formato ISO 4217. Ex: BRL, USD
communitystringComunidade (tenant) do item
supplierIdstring | nullID do fornecedor/supplier associado. Caso não informado, null
formIdstring | nullID do formulário customizado a preencher na compra. Caso não informado, null
requiresApprovalbooleanIndica se o item precisa de aprovação antes de ser ativado (padrão: false)
skusarray<object>Lista de variantes do item (ver abaixo)
optionsarray<object>Lista de atributos/opções do item (ex: Cor, Tamanho)
packageobjectInformações de dimensões e peso para envio (ver abaixo)
galleryarray<object>Array de imagens do item (primeira é a principal)
tagsarray<string>Tags descritivas do item
categoriesarray<string>Categorias do item
contentarray<object>Conteúdo descritivo em Markdown
statsobjectEstatísticas de vendas e dados por canal
observationsarray<object>Histórico de observações/auditoria
magneticobject | nullMídia magnética do item. Caso não informado, null
createdAtstring (ISO 8601)Data e hora de criação
updatedAtstring (ISO 8601)Data e hora da última atualização

Tipos de Item

Os itens são classificados em 3 tipos (discriminadores) com restrições e validações diferentes:

TipoDescriçãoSKU com PlanSKU com Price > 0Caso de Uso
productProduto simples com venda única❌ Não permitido✅ ObrigatórioCamiseta, livro, eletrônico
recurrenceAssinatura/cobrança recorrente✅ Obrigatório✅ ObrigatórioNetflix, Academia, Serviço mensal
giftPresente/brinde gratuito❌ Não permitido❌ Não permitido (price = 0)Brinde, amostra, cupom

Validações Automáticas:

  • Product: Todos os SKUs validam que plan seja null
  • Recurrence: Todos os SKUs validam que plan está preenchido
  • Gift: Todos os SKUs validam que plan é null E price = 0

skus (ItemSku[])

Lista de variantes do item. Cada SKU representa uma combinação de atributos e tem seu próprio preço e estoque.

"skus": [
  {
    "_id": "sku-001-blue-m",
    "alias": "#AB1234",
    "name": "Camiseta Premium - Azul M",
    "caption": "Azul | M",
    "price": {
      "amount": 9900,
      "currency": "BRL"
    },
    "priceFrom": {
      "amount": 12900,
      "currency": "BRL"
    },
    "inventoryId": "698b8a805eaf8de7c5af1cd0",
    "attributes": [
      {
        "key": "color",
        "value": "blue"
      },
      {
        "key": "size",
        "value": "M"
      }
    ],
    "gallery": [],
    "reference": {
      "resourceKind": "layers:group",
      "resourceId": "698b8a805eaf8de7c5af1cd1",
      "dynamicInventory": true,
      "dynamicForm": true
    },
    "plan": null
  }
]

Campos do SKU

CampoTipoDescrição
_idstringID único do SKU (UUID v4, gerado automaticamente)
aliasstring | nullCódigo legível do SKU. Ex: #AB1234. Gerado automaticamente se não informado
namestring | nullNome customizado do SKU (sobrescreve nome do item se informado)
captionstring | nullDescrição do SKU com atributos. Ex: Azul | M. Gerado dinamicamente
priceobjectPreço atual do SKU (Amount)
price.amountintegerValor em centavos (ex: 9900 = R$ 99,00)
price.currencystringMoeda ISO 4217 (herda do item)
priceFromobject | nullPreço original antes da promoção (Amount). Caso não em promoção, null
inventoryIdstringID do Inventory associado (criado automaticamente)
attributesarray<object>Atributos do SKU que diferem este SKU de outros
attributes[].keystringID da opção (ex: color, size)
attributes[].valuestringValor do atributo (ex: blue, M)
galleryarray<object>Imagens específicas deste SKU (sobrescreve gallery do item)
referenceobject | nullReferência externa para integração com sistemas (ex: ERP). Caso não aplicável, null
planobject | nullConfiguração de recorrência (obrigatório para recurrence). Caso não aplicável, null

Validações de SKU

  • Produto (kind: product): Não pode ter plan preenchido
  • Recorrência (kind: recurrence): Deve ter plan preenchido com frequência e ciclos
  • Presente (kind: gift): Não pode ter plan e deve ter price = 0
  • Aliases de SKU devem ser únicos dentro do item
  • Pelo menos 1 SKU é obrigatório
  • Se nenhum SKU é informado, usa defaultPrice como preço do SKU padrão

options (ItemOption[])

Lista de atributos/variações disponíveis para este item. Define as opções que os clientes podem escolher.

"options": [
  {
    "_id": "color",
    "name": "Cor",
    "caption": "Escolha a cor disponível",
    "options": [
      { "name": "Azul" },
      { "name": "Vermelho" },
      { "name": "Preto" },
      { "name": "Branco" }
    ]
  },
  {
    "_id": "size",
    "name": "Tamanho",
    "caption": "Escolha o tamanho",
    "options": [
      { "name": "P" },
      { "name": "M" },
      { "name": "G" },
      { "name": "GG" }
    ]
  }
]

Campos da Opção

CampoTipoDescrição
_idstringID único da opção (slug do nome, 2-36 caracteres)
namestringNome da opção. Ex: Cor, Tamanho, Capacidade (1-32 caracteres)
captionstring | nullDescrição curta da opção (0-32 caracteres). Caso não informada, null
optionsarray<object>Array de valores possíveis
options[].namestringNome do valor. Ex: Azul, M, 64GB (1-32 caracteres)

Validações de Opção

  • IDs das opções devem ser únicos dentro do item (não pode haver 2 color, size, etc.)
  • Nomes das opções devem ser únicos (case-insensitive)

package (Dimensões de Envio)

Informações sobre dimensões e peso do item para cálculo de frete e empacotamento.

"package": {
  "weight": 300,
  "width": 30,
  "height": 40,
  "depth": 10
}
CampoTipoDescrição
weightinteger | nullPeso em gramas. Caso não informado, null
widthinteger | nullLargura em centímetros. Caso não informada, null
heightinteger | nullAltura em centímetros. Caso não informada, null
depthinteger | nullProfundidade em centímetros. Caso não informada, null

Array de imagens do item. A primeira imagem é sempre a principal/capa.

"gallery": [
  {
    "url": "https://cdn.layers.digital/uploads/.../camiseta-1.jpg",
    "path": "/uploads/.../camiseta-1.jpg",
    "mime": "image/jpeg",
    "width": 1200,
    "height": 1600,
    "size": 245680,
    "name": "camiseta-1.jpg",
    "orientation": null
  },
  {
    "url": "https://cdn.layers.digital/uploads/.../camiseta-2.jpg",
    "path": "/uploads/.../camiseta-2.jpg",
    "mime": "image/jpeg",
    "width": 1200,
    "height": 1600,
    "size": 256320,
    "name": "camiseta-2.jpg",
    "orientation": null
  }
]
CampoTipoDescrição
urlstringURL pública da imagem
pathstringCaminho interno da imagem
mimestringTipo MIME. Ex: image/jpeg, image/png
widthinteger | nullLargura em pixels. Caso não informada, null
heightinteger | nullAltura em pixels. Caso não informada, null
sizeintegerTamanho do arquivo em bytes
namestringNome do arquivo
orientationstring | nullOrientação (portrait/landscape). Caso não informada, null

content (ItemContent[])

Conteúdo descritivo do item em Markdown ou outro formato.

"content": [
  {
    "kind": "markdown",
    "markdown": "# Descrição Completa\n\n## Características\n\n- 100% algodão\n- Acabamento premium\n- Disponível em 4 cores"
  }
]
CampoTipoDescrição
kindstringTipo de conteúdo. Valor padrão: markdown
markdownstringConteúdo em formato Markdown

stats (EntityStats)

Estatísticas e metadados de vendas do item agrupados por canal.

"stats": {
  "channels": [
    {
      "_id": "698b8a805eaf8de7c5af1cd2",
      "sales": 156,
      "revenue": {
        "amount": 1544400,
        "currency": "BRL"
      }
    }
  ]
}
CampoTipoDescrição
channelsarray<object>Array de estatísticas por canal
channels[._idstringID do canal
channels[].salesintegerTotal de vendas neste canal
channels[].revenue.amountintegerReceita em centavos
channels[].revenue.currencystringMoeda ISO 4217

Validações Detalhadas

Validações de Tipo de Item

Product (Produto Simples)

  • ✅ SKUs podem ter qualquer nome
  • ❌ SKUs não podem ter plan
  • ✅ SKUs devem ter price > 0
  • ✅ Múltiplos SKUs são permitidos

Recurrence (Assinatura)

  • ✅ Todos os SKUs devem ter plan
  • ✅ SKUs devem ter price > 0
  • ✅ Múltiplos SKUs com planos diferentes são permitidos
  • 📝 Preço é recalculado periodicamente

Gift (Presente)

  • ❌ SKUs não podem ter plan
  • ❌ SKUs devem ter price = 0
  • ✅ Múltiplos SKUs são permitidos
  • 📝 Entregue sem cobrança

Validações de SKU

  • Aliases de SKU devem ser únicos dentro do item
  • Se nenhum SKU existe e defaultPrice não está definido: erro
  • price.amount deve ser sempre positivo (validação Amount)
  • Atributos devem corresponder a opções do item

Validações de Opção

  • Nomes de opção não podem se repetir (case-insensitive)
  • IDs de opção não podem se repetir
  • Cada opção deve ter pelo menos 1 valor
  • Nomes de valores não podem ser vazios

Estados de Publicação

FlagSignificado
active: true, published: trueItem visível e ativo (pronta para venda)
active: true, published: falseItem ativo mas oculto (parado)
active: false, published: falseItem inativo/arquivado (todos os ItemLinks também ficarão inativos)