Grade de produtos

GET para listar; POST para criar/adicionar/actualizar (mesmo endpoint, grade vazia incluída); DELETE para remover. Endpoint oficial: api/products-grid (requer chave de API).

GET https://lerline.com/api/products-grid

Endpoint GET `api/products-grid`. Requer header Authorization: Bearer {api_key}. Lista produtos do bloco (teu). Resposta inclui description_short, scrape_meta (avaliações), discount_percent, cta_button_text (texto do botão) e comportamento afiliado. status: active | out_of_stock | unavailable. Parâmetros: block_id (obrigatório), q (também em description_short), category, page, results_per_page.

ParâmetrosObrigatórioDescrição
block_idObrigatórioID do bloco de grade de produtos.
qOpcionalTermo de busca.
categoryOpcionalFiltrar por categoria.
pageOpcionalPágina (padrão 1).
results_per_pageOpcionalItens por página: 10, 25, 50, 100, 250, 500 ou 1000 (padrão conforme a conta).
curl --request GET \
  --url 'https://lerline.com/api/products-grid?block_id=123' \
  --header 'Authorization: Bearer {api_key}'
{
  "data": [
    {
      "product_id": "prod_123_1700000000_123",
      "biolink_block_id": 123,
      "title": "Produto",
      "description": "",
      "description_short": "",
      "category": "",
      "link": "https://...",
      "canonical_link": "",
      "price": "0.00",
      "currency": "BRL",
      "discount_percent": null,
      "status": "active",
      "display_favicon": false,
      "open_in_new_tab": true,
      "cta_button_text": "Ver curso",
      "search_tags": "",
      "product_sku": "",
      "affiliate_link_set": false,
      "affiliate_unavailable_action": "warn",
      "affiliate_unavailable_redirect_url": "",
      "media_gallery": null,
      "scrape_meta": {
        "reviews": {
          "rating": 4.8,
          "rating_max": 5,
          "count": 1200,
          "summary": ""
        },
        "seller": {
          "name": "Loja exemplo"
        },
        "stock": {
          "label": "Disponível",
          "in_stock": true
        }
      },
      "order": 0,
      "datetime": "2026-01-01 12:00:00"
    }
  ],
  "meta": {
    "page": 1,
    "results_per_page": 25,
    "total": 1,
    "total_pages": 1
  },
  "links": {
    "first": "https://lerline.com/api/products-grid?block_id=123&page=1",
    "last": "https://lerline.com/api/products-grid?block_id=123&page=1",
    "next": null,
    "prev": null,
    "self": "https://lerline.com/api/products-grid?block_id=123&page=1"
  }
}
POST https://lerline.com/api/products-grid

POST cria produtos se a grade estiver vazia (mode append). Também adiciona ou actualiza (product_id existente). Corpo: block_id, products, mode. Opcional: description_short, scrape_meta, discount_percent, cta_button_text (máx. 32; ex. Ver curso), affiliate_unavailable_action, status. Formato Apify aceite. Preferir api/products-grid (não a rota legado api/products).

CampoObrigatórioDescrição
block_idObrigatórioID do bloco (deve ser seu).
productsObrigatórioArray de produtos (formato grade ou Apify).
products[0].product_idOpcionalSe existir no bloco, actualiza; se a grade estiver vazia ou o ID for novo, cria.
products[0].description_shortOpcionalDescrição curta do card.
products[0].scrape_metaOpcionalAvaliações (reviews), vendedor, estoque, preço da loja.
products[0].discount_percentOpcionalDesconto 1–99 (ou via scrape_meta.price.discount_percent).
products[0].cta_button_textOpcionalTexto do botão neste item (máx. 32). Vazio = usa o padrão da grade / «Ver produto». Ex.: Ver curso, Descarregar.
products[0].affiliate_unavailable_actionOpcionalwarn, hide ou redirect.
products[0].statusOpcionalactive, out_of_stock ou unavailable.
modeOpcionalappend (criar/adicionar; padrão) ou replace (substituir todos).
curl --request POST \
  --url 'https://lerline.com/api/products-grid' \
  --header 'Authorization: Bearer {api_key}' \
  --header 'Content-Type: application/json' \
  --data '{"block_id": 123, "products": [{"title": "Produto", "link": "https://...", "cta_button_text": "Ver curso", "media_gallery": {"items": [{"type": "image", "url": "https://..."}]}}], "mode": "append"}'
curl --request POST \
  --url 'https://lerline.com/api/products-grid' \
  --header 'Authorization: Bearer {api_key}' \
  --header 'Content-Type: application/json' \
  --data '{"block_id": 123, "products": [{"product_id":"prod_123_1700000000_123","title":"Produto (atualizado)","link":"https://...","media_gallery":{"items":[{"type":"image","url":"https://..."}]}}], "mode": "append"}'
{
  "data": {
    "imported": 1,
    "skipped": 0,
    "limit_reached": false
  }
}
DELETE https://lerline.com/api/products-grid

Endpoint DELETE `api/products-grid`. Requer header Authorization: Bearer {api_key}. Use block_id (obrigatório) + product_id (query) para deletar 1 produto, ou envie JSON {"product_ids":[...]} para deletar em lote.

ParâmetrosObrigatórioDescrição
block_idObrigatórioID do bloco de grade de produtos.
product_idOpcionalID do produto a deletar (string retornada no GET como product_id).
curl --request DELETE \
  --url 'https://lerline.com/api/products-grid?block_id=123&product_id=prod_123_1700000000_123' \
  --header 'Authorization: Bearer {api_key}'
curl --request DELETE \
  --url 'https://lerline.com/api/products-grid?block_id=123' \
  --header 'Authorization: Bearer {api_key}' \
  --header 'Content-Type: application/json' \
  --data '{"product_ids":["prod_123_1700000000_123","prod_123_1700000001_456"]}'
{
  "data": {
    "deleted": 2
  }
}