Production runs, what they plan to consume and what they consumed, lot by lot.
idintegerconsumed_stepsarray of objectsnullableWhat the run consumed, lot by lot. On GET /productions/{production_id} only; null elsewhere.
consumed_stepslot_idintegernullableSet on consumption only, not on a plan.
product_idintegernullablequantity_basenumbernullableIn the component product's base unit.
end_datestringnullableexpiration_datestringnullablelocation_idintegernullablelot_numberstringnullableplanned_stepsarray of objectsnullableWhat the run intends to consume. On GET /productions/{production_id} only; null elsewhere.
planned_stepslot_idintegernullableSet on consumption only, not on a plan.
product_idintegernullablequantity_basenumbernullableIn the component product's base unit.
produced_qty_display_unitsnumbernullableWhat was produced, in the product's display unit.
product_idintegernullableproduction_line_idintegernullableproduction_nointegernullableThe run number, unique within your account.
production_qty_display_unitsnumbernullableThe planned quantity, in the product's display unit. Step quantities are in base units.
start_datestringnullablestatusstringPLANNEDIN_PROGRESSIN_PROGRESS_TRANSFORMATIONCOMPLETEDCANCELLEDON_HOLDQUARANTINE/productionsmanufacturing:readplanned_steps and consumed_steps are null here: retrieve a run for them.
statusarray of stringnullableRepeat the parameter to match any of several statuses.
PLANNEDIN_PROGRESSIN_PROGRESS_TRANSFORMATIONCOMPLETEDCANCELLEDON_HOLDQUARANTINEproduct_idintegernullableproduction_line_idintegernullablelot_numberstringnullablesearchstringnullableFree-text match.
sortstringnullableComma-separated field:direction pairs, e.g. id:desc. Sortable: end_date, id, production_no, start_date, status. id is always added last, so paging is stable.
limitintegerRows to return. Maximum 200.
offsetintegerRows to skip. Maximum 10000: to read further, narrow the filters or page with updated_since.
data, with pagination.curl "https://public-api.nutrasoft.ca/v1/productions?limit=50" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY"{
"data": [
{
"id": 123,
"consumed_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"end_date": "2026-09-10T14:30:00Z",
"expiration_date": "2026-09-10T14:30:00Z",
"location_id": 123,
"lot_number": "LOT-2026-0142",
"planned_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"produced_qty_display_units": 12.5,
"product_id": 123,
"production_line_id": 123,
"production_no": 10,
"production_qty_display_units": 12.5,
"start_date": "2026-09-10T14:30:00Z",
"status": "PLANNED"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
},
"order": "id:asc"
}/productions/{production_id}manufacturing:readIncludes planned_steps, what the run intends to consume, and consumed_steps, what it consumed lot by lot, both in base units.
production_idintegerrequiredThe run's id.
data.curl "https://public-api.nutrasoft.ca/v1/productions/123" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY"{
"data": {
"id": 123,
"consumed_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"end_date": "2026-09-10T14:30:00Z",
"expiration_date": "2026-09-10T14:30:00Z",
"location_id": 123,
"lot_number": "LOT-2026-0142",
"planned_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"produced_qty_display_units": 12.5,
"product_id": 123,
"production_line_id": 123,
"production_no": 10,
"production_qty_display_units": 12.5,
"start_date": "2026-09-10T14:30:00Z",
"status": "PLANNED"
}
}/productions/{production_id}/statusmanufacturing:writeMoves a run between PLANNED, ON_HOLD, QUARANTINE and CANCELLED. Starting and completing a run happen on the production floor, so IN_PROGRESS, IN_PROGRESS_TRANSFORMATION and COMPLETED are refused with 409, as are runs already COMPLETED or CANCELLED and signed, locked records. The response carries no steps.
production_idintegerrequiredThe run's id.
statusstringrequiredPLANNED, ON_HOLD, QUARANTINE or CANCELLED. IN_PROGRESS, IN_PROGRESS_TRANSFORMATION and COMPLETED are refused with 409: starting and completing a run happen on the production floor.
PLANNEDIN_PROGRESSIN_PROGRESS_TRANSFORMATIONCOMPLETEDCANCELLEDON_HOLDQUARANTINEdata.curl -X POST "https://public-api.nutrasoft.ca/v1/productions/123/status" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "ON_HOLD"
}'{
"data": {
"id": 123,
"consumed_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"end_date": "2026-09-10T14:30:00Z",
"expiration_date": "2026-09-10T14:30:00Z",
"location_id": 123,
"lot_number": "LOT-2026-0142",
"planned_steps": [
{
"lot_id": 123,
"product_id": 123,
"quantity_base": 12.5
}
],
"produced_qty_display_units": 12.5,
"product_id": 123,
"production_line_id": 123,
"production_no": 10,
"production_qty_display_units": 12.5,
"start_date": "2026-09-10T14:30:00Z",
"status": "PLANNED"
}
}