What it is
Per-position line items of Orders (Shopify-sourced). One row per order position: product, SKU, quantity, and the price actually paid. Read-only in the app; linked to orders viaorder_external_id.
Line items are what the demand engine actually counts — units sold per variant come from summing quantity here, joined to Products via product_variant_external_id → products.external_id. Quantity is always summed, never row-counted, so multi-unit lines are handled correctly.
How it gets data
Ingest-enabled — external systems push rows through the Ingest API:- One JSON record per request; unknown fields are dropped.
- Idempotent upsert on
(tenant_id, external_id)—external_idis the source line-item id. tenant_id/workspace_idcome from the API key context, never from the body.- A ready-made Make.com flow template is downloadable in Settings → Data Sources.
Always send
product_variant_external_id when the source provides it. product_external_id is the parent-product gid and is too coarse for demand math — one product gid covers several SKUs/sizes.Fields
Line identity
Quantity & pricing
Product linkage
“ingest” = populated through the ingest endpoint; read-only in the app and over MCP row writes.
metadata is accepted on ingest but not surfaced as a default table column.
Like every workspace table, line items also carry the system columns
id, tenant_id, workspace_id, created_at, and updated_at — set automatically, never sent by integrations.