Produtos
Mantenha o catálogo da sua loja no Emailit para grades de produtos, recomendações e itens de pedidos.
Criar ou atualizar um produto
Adiciona um produto ao seu catálogo ou o atualiza, se já existir um produto com o mesmo id. O id é o ID do produto na sua loja, então você pode enviar o mesmo produto de novo sempre que ele mudar. Requer uma chave de API com escopo full ou events. Com uma chave events, a resposta traz apenas object, id e external_id.
id é sempre obrigatório, e title é obrigatório para um produto novo. Os campos só são gravados quando você os envia, então um produto que você envia de novo só com um preço novo mantém o título, as categorias, a imagem e o resto. Para enviar muitos produtos de uma vez, use Criar ou atualizar produtos em massa.
As grades de produtos, as recomendações e os itens de pedidos nos e-mails leem o catálogo. Consulte Produtos, cupons e o carrinho.
/productsCorpo da requisição
idstring | numberObrigatórioO ID do produto na sua loja, com até 255 caracteres. Os números são armazenados como strings. Armazenado como external_id. Você também pode enviá-lo como external_id.
titlestringNome do produto, com até 500 caracteres. Você também pode enviá-lo como name. Obrigatório para um produto novo.
skustringUnidade de manutenção de estoque (SKU), com até 255 caracteres.
descriptionstringDescrição do produto, com até 10.000 caracteres.
urlstringPágina do produto na sua loja. Uma URL http ou https, com até 2.048 caracteres.
image_urlstringImagem do produto. Uma URL http ou https, com até 2.048 caracteres.
pricenumber | stringPreço atual, como número ou string numérica, por exemplo "89.00". Não pode ser negativo. Armazenado com até 4 casas decimais.
compare_at_pricenumber | stringPreço antes de um desconto, no mesmo formato de price. Quando ele é maior que price, o produto conta como em promoção.
currencystringCódigo ISO 4217 de três letras, como USD ou EUR. Letras minúsculas são aceitas. Os e-mails formatam os preços do produto nessa moeda, ou em USD quando ela não está definida.
categoriesstring[]Até 50 nomes de categorias, cada um com até 191 caracteres. Os duplicados são removidos.
brandstringNome da marca, com até 191 caracteres.
inventory_quantityinteger | nullUnidades em estoque. null significa que você não controla o estoque. As grades de produtos nos e-mails deixam de fora os produtos com estoque 0.
statusstringactive ou archived. Os produtos novos são active. Os produtos arquivados ficam ocultos em Listar produtos por padrão e ficam de fora das grades de produtos.
metadataobjectOs seus próprios dados de chave e valor, com até 16 KB em JSON. Enviar metadata substitui o objeto armazenado.
Retorno
201 Created com o objeto de produto quando o produto é novo, ou 200 OK quando um produto existente foi atualizado. Retorna 422 quando um campo é inválido.
{
"object": "product",
"id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
"external_id": "8123456789",
"sku": "TRS-BLU-42",
"title": "Trail running shoe",
"description": null,
"url": "https://shop.example.com/products/trail-running-shoe",
"image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
"price": 89,
"compare_at_price": 119,
"currency": "USD",
"categories": [
"Shoes",
"Running"
],
"brand": "Acme Outdoors",
"inventory_quantity": 34,
"status": "active",
"metadata": {},
"created_at": "2026-10-08T14:21:07.512Z",
"updated_at": "2026-10-08T14:21:07.512Z"
}{
"message": "Validation failed. price: must not be negative",
"errors": {
"price": [
"must not be negative"
]
}
}Obter um produto
Obtém um produto pelo ID dele no Emailit ou pelo ID do produto na sua loja. Requer uma chave de API com escopo full.
/products/{id}Parâmetros de caminho
idstringObrigatórioO ID do produto (prd_...) ou o ID do produto na sua loja (external_id). Codifique para URL os IDs da loja que contêm caracteres especiais.
O objeto de produto
objectstringSempre product.
idstringID do produto no Emailit (prd_...).
external_idstringO ID do produto na sua loja: o id que você enviou. Os itens de pedidos e de carrinhos se referem aos produtos por esse ID.
skustring | nullUnidade de manutenção de estoque (SKU).
titlestringNome do produto.
descriptionstring | nullDescrição do produto.
urlstring | nullPágina do produto na sua loja.
image_urlstring | nullImagem do produto.
pricenumber | nullPreço atual.
compare_at_pricenumber | nullPreço antes de um desconto. Um produto está em promoção quando compare_at_price é maior que price.
currencystring | nullCódigo ISO 4217 de três letras dos preços.
categoriesstring[]Nomes das categorias.
brandstring | nullNome da marca.
inventory_quantityinteger | nullUnidades em estoque. null significa que o estoque não é controlado. As grades de produtos nos e-mails deixam de fora os produtos com estoque 0.
statusstringactive ou archived. As grades de produtos nos e-mails deixam de fora os produtos arquivados.
metadataobjectOs seus próprios dados de chave e valor.
created_atstringQuando o produto foi adicionado, em ISO 8601 UTC.
updated_atstringQuando o produto mudou pela última vez, em ISO 8601 UTC.
{
"object": "product",
"id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
"external_id": "8123456789",
"sku": "TRS-BLU-42",
"title": "Trail running shoe",
"description": "Lightweight shoe with a grippy sole for wet trails.",
"url": "https://shop.example.com/products/trail-running-shoe",
"image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
"price": 89,
"compare_at_price": 119,
"currency": "USD",
"categories": [
"Shoes",
"Running"
],
"brand": "Acme Outdoors",
"inventory_quantity": 34,
"status": "active",
"metadata": {
"color": "blue"
},
"created_at": "2026-10-02T08:15:22.418Z",
"updated_at": "2026-10-08T14:21:07.512Z"
}{
"error": "Product not found",
"message": "Product not found."
}Atualizar um produto
Atualiza um produto que já está no seu catálogo. Só mudam os campos que você enviar. O ID do produto na sua loja não pode mudar: um id no corpo é ignorado. Requer uma chave de API com escopo full ou events. Com uma chave events, a resposta traz apenas object, id e external_id.
Para criar produtos e atualizá-los com a mesma chamada, use Criar ou atualizar um produto.
/products/{id}Parâmetros de caminho
idstringObrigatórioO ID do produto (prd_...) ou o ID do produto na sua loja.
Corpo da requisição
Qualquer um dos campos de Criar ou atualizar um produto, exceto id: title, sku, description, url, image_url, price, compare_at_price, currency, categories, brand, inventory_quantity, status e metadata. As mesmas regras se aplicam. categories e metadata são substituídos por inteiro.
Retorno
200 OK com o objeto de produto atualizado. Retorna 404 se nenhum produto corresponder a id e 422 quando um campo é inválido.
{
"object": "product",
"id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
"external_id": "8123456789",
"sku": "TRS-BLU-42",
"title": "Trail running shoe",
"description": "Lightweight shoe with a grippy sole for wet trails.",
"url": "https://shop.example.com/products/trail-running-shoe",
"image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
"price": 79,
"compare_at_price": 119,
"currency": "USD",
"categories": [
"Shoes",
"Running"
],
"brand": "Acme Outdoors",
"inventory_quantity": 20,
"status": "active",
"metadata": {
"color": "blue"
},
"created_at": "2026-10-02T08:15:22.418Z",
"updated_at": "2026-10-09T10:02:41.205Z"
}{
"error": "Product not found",
"message": "Product not found."
}{
"message": "Validation failed. image_url: must be an http(s) URL",
"errors": {
"image_url": [
"must be an http(s) URL"
]
}
}Listar produtos
Lista os produtos do seu catálogo, dos mais recentes para os mais antigos. Sem status, só os produtos ativos são listados. Requer uma chave de API com escopo full.
/productsParâmetros de consulta
pageintegerNúmero da página para a paginação (mínimo: 1, padrão: 1).
limitintegerNúmero de produtos a retornar (mínimo: 1, máximo: 100, padrão: 25).
searchstringBusca sem diferenciar maiúsculas de minúsculas no título, no ID do produto na sua loja (external_id) ou no SKU.
categorystringSó os produtos desta categoria. O nome precisa corresponder exatamente, incluindo maiúsculas e minúsculas.
statusstringactive (padrão), archived ou all. Use all quando filtrar pela chave status abaixo, porque o padrão já limita a lista aos produtos ativos.
idsstringLista separada por vírgulas de até 100 IDs de produto. Cada um pode ser o ID no Emailit (prd_...) ou o ID do produto na sua loja.
matchstringall (padrão) exige que todos os filtros key.condition correspondam. or aceita qualquer um deles. Consulte Filtragem.
sortstringChave de ordenação: created_at (padrão), updated_at, title ou price.
orderstringDireção da ordenação: asc ou desc (padrão).
Filtros
Os filtros de listagem são um único nível de parâmetros de consulta key.condition=value. Consulte Filtragem para match, order, direction e a lista de condições por tipo.
Chaves de filtro
| Chave | Tipo | Condições | Observações |
|---|---|---|---|
title | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
external_id | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
sku | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
brand | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
currency | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
price | number | exact, not_exact, gt, gte, lt, lte, empty, not_empty | |
inventory_quantity | number | exact, not_exact, gt, gte, lt, lte, empty, not_empty | |
status | enum | exact, not_exact | Valores: active, archived |
created_at | date | exact, before, after, empty, not_empty | |
updated_at | date | exact, before, after, empty, not_empty |
Chaves de ordenação
Este endpoint ordena com sort definido como uma destas chaves e order definido como asc ou desc (aqui, order=<key> retorna 400): created_at, updated_at, title, price
Neste endpoint, order só aceita asc ou desc. Passe a chave de ordenação em sort, por exemplo sort=price&order=asc.
Retorno
Uma página de objetos de produto em data, com total_records, next_page_url e previous_page_url. As URLs de página levam só page e limit, então adicione a sua busca e os seus filtros de novo quando segui-las.
{
"data": [
{
"object": "product",
"id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
"external_id": "8123456789",
"sku": "TRS-BLU-42",
"title": "Trail running shoe",
"description": "Lightweight shoe with a grippy sole for wet trails.",
"url": "https://shop.example.com/products/trail-running-shoe",
"image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
"price": 89,
"compare_at_price": 119,
"currency": "USD",
"categories": [
"Shoes",
"Running"
],
"brand": "Acme Outdoors",
"inventory_quantity": 34,
"status": "active",
"metadata": {
"color": "blue"
},
"created_at": "2026-10-02T08:15:22.418Z",
"updated_at": "2026-10-08T14:21:07.512Z"
}
],
"total_records": 1,
"next_page_url": null,
"previous_page_url": null
}Criar ou atualizar produtos em massa
Envie até 1.000 produtos em uma requisição, por exemplo para importar o seu catálogo ou para sincronizá-lo periodicamente. Cada produto segue as regras de Criar ou atualizar um produto: ele é criado ou atualizado pelo id, um produto novo precisa de um title e os campos só são gravados quando você os envia. Requer uma chave de API com escopo full ou events. Com uma chave events, a resposta traz apenas object, id e external_id.
Os produtos inválidos são ignorados e listados em rejected; os outros são armazenados. A requisição retorna 200 mesmo assim.
/products/batchCorpo da requisição
productsobject[]ObrigatórioDe 1 a 1.000 produtos, cada um com os campos de Criar ou atualizar um produto.
Retorno
createdintegerNúmero de produtos novos.
updatedintegerNúmero de produtos existentes que foram atualizados.
rejectedobject[]Produtos que não foram armazenados. Cada item tem o index do produto no seu array products e errors, indexado pelo caminho do campo, como products.3.price.
Retorna 422 se products estiver vazio ou tiver mais de 1.000 itens.
{
"created": 1,
"updated": 1,
"rejected": [
{
"index": 2,
"errors": {
"products.2.title": [
"is required"
]
}
}
]
}{
"message": "Validation failed. products: Send 1 to 1000 products.",
"errors": {
"products": [
"Send 1 to 1000 products."
]
}
}Listar categorias de produtos
Lista as categorias usadas pelos produtos ativos, em ordem alfabética, com o número de produtos ativos em cada uma. Os produtos arquivados não são contados. Retorna até 1.000 categorias e não tem paginação. Requer uma chave de API com escopo full.
As categorias vêm do campo categories de cada produto. Use um nome de categoria com o parâmetro category de Listar produtos.
/products/categories{
"data": [
{
"name": "Accessories",
"products": 18
},
{
"name": "Running",
"products": 12
},
{
"name": "Shoes",
"products": 27
}
]
}Excluir um produto
Remove um produto do seu catálogo. Os pedidos que o contêm mantêm os itens deles, que armazenam o próprio título, preço e ID do produto. Para ocultar um produto sem excluí-lo, defina o status dele como archived. Requer uma chave de API com escopo full.
Se o script de rastreamento registrar uma visualização de um produto excluído com o título dele, o produto é adicionado de novo ao catálogo a partir dos dados da página.
/products/{id}Parâmetros de caminho
idstringObrigatórioO ID do produto (prd_...) ou o ID do produto na sua loja.
{
"object": "product",
"id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
"deleted": true
}{
"error": "Product not found",
"message": "Product not found."
}