{
"_links": {
"sales_summary": "/api/sales/summary?from=2026-03-01&to=2026-03-31&group_by=month",
"self": "/api/products/sales-velocity?from=2026-03-01&to=2026-03-31&limit=10&sort_by=qty_per_day",
"top_products": "/api/sales/top-products?from=2026-03-01&to=2026-03-31&limit=10"
},
"cache": {
"age_seconds": 412,
"cached_at": "2026-04-02T08:30:00-04:00",
"expires_at": "2026-04-03T08:30:00-04:00",
"force_refreshed": false,
"key_hash": "sha1:8d4f2a6c1e9b3d7f5a0c2e4b6d8f1a3c5e7b9d0f",
"status": "hit",
"ttl_policy": "historical_24h",
"ttl_remaining_seconds": 85988
},
"filter": {
"limit": 10,
"sort_by": "qty_per_day"
},
"items": [
{
"_links": {
"product_detail": "/api/inventory/products/by-id/128"
},
"avg_lines_per_invoice": 1.1034,
"first_sale_date": "2026-03-02",
"invoices_count": 58,
"last_sale_date": "2026-03-31",
"lines_count": 64,
"product": {
"code": "VIS-8-100",
"id": 128,
"name": "Vis à bois n° 8 — boîte de 100"
},
"qty_per_day": 20,
"qty_total": 620,
"rank": 1,
"revenue": 7130,
"revenue_per_day": 230,
"share_pct": 8.68
},
{
"_links": {
"product_detail": "/api/inventory/products/by-id/412"
},
"avg_lines_per_invoice": 1.125,
"first_sale_date": "2026-03-04",
"invoices_count": 16,
"last_sale_date": "2026-03-27",
"lines_count": 18,
"product": {
"code": "GYP-12",
"id": 412,
"name": "Gypse régulier 1/2 po 4 x 8"
},
"qty_per_day": 16,
"qty_total": 496,
"rank": 2,
"revenue": 6200,
"revenue_per_day": 200,
"share_pct": 7.55
}
],
"metadata": {
"extracted_at": "2026-04-02T08:30:00-04:00",
"organisation_id": "entreprise_exemple",
"scope": "invoicing_lines_type_1_only",
"scope_note": "Lignes de produit des factures de la période ; moyennes par jour calculées sur tous les jours de la période",
"sdk_indexes_used": {
"invoicing": 6,
"invoicing_line": 6
},
"truncated": true
},
"period": {
"days": 31,
"from": "2026-03-01",
"to": "2026-03-31"
},
"summary": {
"currency": "CAD",
"invoices_count": 138,
"lines_count": 612,
"period_days": 31,
"products_count": 47,
"qty_total": 4815.5,
"revenue_total": 82150
}
}