Pular para o conteúdo

Produtos (products)

O recurso products expõe os itens do catálogo da sua conta: produtos e serviços com preço de venda e de custo, unidade, códigos EAN e interno, categorização, saldo de estoque e disponibilidade no catálogo público. Itens excluídos no aplicativo nunca aparecem nas respostas.

Módulocatalogo
Escoposproducts:read (também concedido por *:read e por *:write)
Operaçõessomente leitura
MétodoEndpointDescrição
GET/v1/productsLista produtos, com paginação por cursor
GET/v1/products/{id}Retorna um produto pelo id
CampoTipoDescrição
iduuidIdentificador do produto
namestringNome do produto ou serviço
descriptionstring | nullDescrição livre
unitstringUnidade de venda, por exemplo un, kg ou h
selling_pricenumberPreço de venda
cost_pricenumberPreço de custo
is_variable_priceboolean | nullSe o preço é definido no momento da venda
min_pricenumber | nullPreço mínimo, quando o preço é variável
max_pricenumber | nullPreço máximo, quando o preço é variável
ean_codestring | nullCódigo de barras EAN
internal_codestring | nullCódigo interno ou SKU
category_iduuid | nullCategoria do catálogo
subcategory_iduuid | nullSubcategoria do catálogo
current_stocknumber | nullSaldo atual em estoque
min_stock_alertnumber | nullSaldo que dispara o alerta de reposição
manages_stockboolean | nullSe o item controla estoque
is_in_catalogboolean | nullSe o item aparece no catálogo público
allows_appointmentsboolean | nullSe o item pode ser agendado
image_urlstring | nullEndereço da imagem do produto
is_activeboolean | nullSe o item está ativo
created_atstring (ISO 8601) | nullData de criação
updated_atstring (ISO 8601) | nullData da última atualização

Use fields para receber só um subconjunto das colunas: ?fields=id,name,selling_price.

A sintaxe do filtro é filter[campo][operador]=valor. Os campos filtráveis de products são:

CampoExemplo
namefilter[name][ilike]=%shampoo%
is_activefilter[is_active][eq]=true
category_idfilter[category_id][eq]=6f2c9d10-3b4a-4c5d-8e7f-0a1b2c3d4e5f
ean_codefilter[ean_code][eq]=7891234567895
is_in_catalogfilter[is_in_catalog][eq]=true

Os operadores aceitos são eq, neq, gt, gte, lt, lte, in, nin, ilike e is_null. Um campo fora da lista acima responde 422 validation.

A ordenação usa sort=campo para crescente e sort=-campo para decrescente. Os campos ordenáveis são created_at, updated_at e name. O padrão é -created_at.

A listagem também aceita limit (de 1 a 100, padrão 20) e cursor. Veja Paginação, filtros e ordenação.

Produtos ativos cujo nome contém shampoo:

Terminal window
curl -G "$LIGGA_BASE/v1/products" \
-H "Authorization: Bearer $LIGGA_API_KEY" \
--data-urlencode "limit=2" \
--data-urlencode "filter[is_active][eq]=true" \
--data-urlencode "filter[name][ilike]=%shampoo%" \
--data-urlencode "sort=-created_at"
{
"data": [
{
"id": "b7e1f3a2-8c4d-4e5f-9a6b-1c2d3e4f5a6b",
"name": "Shampoo Hidratante 300ml",
"description": "Linha profissional para cabelos secos",
"unit": "un",
"selling_price": 49.9,
"cost_price": 22.5,
"is_variable_price": false,
"min_price": null,
"max_price": null,
"ean_code": "7891234567895",
"internal_code": "SHP-300",
"category_id": "6f2c9d10-3b4a-4c5d-8e7f-0a1b2c3d4e5f",
"subcategory_id": null,
"current_stock": 34,
"min_stock_alert": 5,
"manages_stock": true,
"is_in_catalog": true,
"allows_appointments": false,
"image_url": "https://cdn.exemplo.com/produtos/shp-300.jpg",
"is_active": true,
"created_at": "2026-05-18T12:34:56Z",
"updated_at": "2026-06-02T09:10:11Z"
},
{
"id": "0d9e8f7a-6b5c-4d3e-2f1a-9b8c7d6e5f4a",
"name": "Shampoo Antiqueda 250ml",
"description": null,
"unit": "un",
"selling_price": 39.9,
"cost_price": 18,
"is_variable_price": false,
"min_price": null,
"max_price": null,
"ean_code": "7899876543210",
"internal_code": "SHP-250",
"category_id": "6f2c9d10-3b4a-4c5d-8e7f-0a1b2c3d4e5f",
"subcategory_id": null,
"current_stock": 12,
"min_stock_alert": 5,
"manages_stock": true,
"is_in_catalog": true,
"allows_appointments": false,
"image_url": null,
"is_active": true,
"created_at": "2026-04-30T08:00:00Z",
"updated_at": null
}
],
"pagination": {
"next_cursor": "eyJpZCI6IjBkOWU4ZjdhLi4uIiwidiI6IjIwMjYtMDQtMzBUMDg6MDA6MDBaIn0",
"has_more": true,
"limit": 2
},
"meta": { "request_id": "req_01JZXQ8V2K5M7N9P0R1S2T3U4V" }
}

Enquanto pagination.has_more for true, repita a chamada passando cursor=<pagination.next_cursor>.

Uma leitura por código de barras devolve zero ou um item:

Terminal window
curl -G "$LIGGA_BASE/v1/products" \
-H "Authorization: Bearer $LIGGA_API_KEY" \
--data-urlencode "filter[ean_code][eq]=7891234567895"
Terminal window
curl "$LIGGA_BASE/v1/products/b7e1f3a2-8c4d-4e5f-9a6b-1c2d3e4f5a6b" \
-H "Authorization: Bearer $LIGGA_API_KEY"
{
"data": {
"id": "b7e1f3a2-8c4d-4e5f-9a6b-1c2d3e4f5a6b",
"name": "Shampoo Hidratante 300ml",
"description": "Linha profissional para cabelos secos",
"unit": "un",
"selling_price": 49.9,
"cost_price": 22.5,
"is_variable_price": false,
"min_price": null,
"max_price": null,
"ean_code": "7891234567895",
"internal_code": "SHP-300",
"category_id": "6f2c9d10-3b4a-4c5d-8e7f-0a1b2c3d4e5f",
"subcategory_id": null,
"current_stock": 34,
"min_stock_alert": 5,
"manages_stock": true,
"is_in_catalog": true,
"allows_appointments": false,
"image_url": "https://cdn.exemplo.com/produtos/shp-300.jpg",
"is_active": true,
"created_at": "2026-05-18T12:34:56Z",
"updated_at": "2026-06-02T09:10:11Z"
},
"meta": { "request_id": "req_01JZXQ8V2K5M7N9P0R1S2T3U4V" }
}
HTTPtypeQuando acontece
401invalid_tokenCabeçalho Authorization ausente ou chave inexistente
403api_disabledA conta ainda não tem a API habilitada
403module_not_enabledMódulo catalogo fora do contrato
403insufficient_scopeChave sem products:read
404not_foundid inexistente ou pertencente a outra conta
422validationCampo de filtro, operador, sort ou cursor não aceito
429rate-limit-exceededLimite de requisições do plano excedido