Product provenance fields on the External API

Every product response from the Luminous External V1 API now includes three provenance fields:

FieldTypeDescription
created_byintegerUser ID of the person who created the product (0 if not attributable to a user).
updated_byintegerUser ID of the person who last edited the product.
created_viastring | nullThe channel through which the product was originally created. See values below. Null for products created before provenance tracking was introduced.

created_via values

ValueMeaning
userA signed-in operator created the product in the Luminous UI.
apiThe product was created through an External API call.
importThe product was created via a spreadsheet / bulk import.
auto_create_skuLuminous automatically created the SKU while processing an incoming order.
jobA background job or scheduled command created the product.
systemAn 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.