Product provenance fields on the External API
Every product response from the Luminous External V1 API now includes three provenance fields:
| Field | Type | Description |
|---|---|---|
created_by | integer | User ID of the person who created the product (0 if not attributable to a user). |
updated_by | integer | User ID of the person who last edited the product. |
created_via | string | null | The channel through which the product was originally created. See values below. Null for products created before provenance tracking was introduced. |
created_via values
| Value | Meaning |
|---|---|
user | A signed-in operator created the product in the Luminous UI. |
api | The product was created through an External API call. |
import | The product was created via a spreadsheet / bulk import. |
auto_create_sku | Luminous automatically created the SKU while processing an incoming order. |
job | A background job or scheduled command created the product. |
system | An internal system write with no attributable source. |
Single-product responses
When fetching one product — GET /external/api/v1/products/{id} — all three fields are always present in the response.
List responses
When fetching a product list — GET /external/api/v1/products — created_by and updated_by are always included. created_via is opt-in to preserve the existing response shape for callers that don't need it.
To include created_via in a list response, add ?include=created_via:
GET /external/api/v1/products?include=created_via
You can combine it with other filters:
GET /external/api/v1/products?include=created_via&page=1&limit=50
Example response excerpt
{
"data": {
"id": 4201,
"sku": "WIDGET-BLU",
"name": "Blue Widget",
"created_by": 12,
"updated_by": 7,
"created_via": "import",
"created_at": "2026-01-15T09:30:00.000000Z",
"updated_at": "2026-09-28T14:02:00.000000Z"
}
}
Note: Products created before provenance tracking was introduced will show
created_via: null. This is expected and does not indicate an error.