Production API
REST endpoints for production in SKUFlow: 8 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
| Operation | Endpoint | Risk |
|---|---|---|
| The production board | GET /organizations/{organizationId}/production/jobs | read |
| Move or schedule a job | PATCH /organizations/{organizationId}/production/jobs/{jobId} | write |
| The production schedule | GET /organizations/{organizationId}/production/schedule | read |
| Plan unscheduled jobs | POST /organizations/{organizationId}/production/schedule | write |
| List presses and machines | GET /organizations/{organizationId}/production/resources | read |
| Add a press or machine | POST /organizations/{organizationId}/production/resources | write |
| Change a press or machine | PATCH /organizations/{organizationId}/production/resources/{resourceId} | write |
| Delete a press or machine | DELETE /organizations/{organizationId}/production/resources/{resourceId} | sensitive |
The production board
GET /organizations/{organizationId}/production/jobs
Jobs of open orders (one per design placement): status (WAITING until the order is ready, QUEUED, IN_PROGRESS, DONE with includeDone), the order (in-hands date, rush, customer), method, press and day. Filter by status, press, method type, order, scheduled range or unscheduled. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | productionJobs_list (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | enum | No | WAITING (the order isn't ready), QUEUED, IN_PROGRESS, DONE. One of WAITING, QUEUED, IN_PROGRESS, DONE. |
resourceId | query | string | No | |
methodType | query | enum | No | A decoration method type. One of SCREEN_PRINT, EMBROIDERY, DTG, DTF, HEAT_TRANSFER, SUBLIMATION, LASER, PAD_PRINT, UV_PRINT, LARGE_FORMAT_PRINT. |
orderId | query | string | No | |
from | query | string | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
to | query | string | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
unscheduled | query | boolean | No | |
includeDone | query | boolean | No |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/jobs" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | string | Job id. |
items[].orderId | string | |
items[].name | string | |
items[].designId | string or null | |
items[].areaName | string or null | |
items[].methodId | string or null | |
items[].methodType | enum or null | A decoration method type. One of SCREEN_PRINT, EMBROIDERY, DTG, DTF, HEAT_TRANSFER, SUBLIMATION, LASER, PAD_PRINT, UV_PRINT, LARGE_FORMAT_PRINT. |
items[].quantity | integer | |
items[].status | enum | WAITING (the order isn't ready), QUEUED, IN_PROGRESS, DONE. One of WAITING, QUEUED, IN_PROGRESS, DONE. |
items[].outsourced | boolean | Sent to an outsourced decorator (vendorId). |
items[].vendorId | string or null | |
items[].resourceId | string or null | The press or machine it is planned on. |
items[].scheduledDate | string or null | |
items[].sortOrder | integer | |
items[].estimatedMinutes | integer | |
items[].assignedUserId | string or null | |
items[].startedAt | string (date-time) or null | |
items[].completedAt | string (date-time) or null | |
items[].notes | string or null | |
items[].order | object | |
items[].order.id | string | |
items[].order.identifier | string | |
items[].order.title | string | |
items[].order.status | enum | AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS (gates, moved by the server), READY (for production), IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. One of AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS, READY, IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. |
items[].order.dueDate | string or null | |
items[].order.rush | boolean | |
items[].resource | object or null | |
items[].resource.id | string | |
items[].resource.name | string | |
items[].vendor | object or null | |
items[].vendor.id | string | |
items[].vendor.name | string | |
items[].method | object or null | |
items[].method.id | string | |
items[].method.name | string | |
items[].design | object or null | |
items[].design.id | string | |
items[].design.name | string | |
today | string |
Move or schedule a job
PATCH /organizations/{organizationId}/production/jobs/{jobId}
Moves a job on the board: status (starting the first job starts its order's production; finishing the last makes the order ready to ship), resourceId (a press that runs its method; null unschedules) and scheduledDate, sortOrder, assignedUserId, notes. A job of an order still waiting on its gates can't start (409).
| Permission | production.manage (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | productionJobs_update (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
jobId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
status | enum | No | WAITING (the order isn't ready), QUEUED, IN_PROGRESS, DONE. One of WAITING, QUEUED, IN_PROGRESS, DONE. |
resourceId | string or null | No | |
scheduledDate | string or null | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
sortOrder | integer | No | 0–100000. |
assignedUserId | string or null | No | A team member's user id (GET /team). |
notes | string or null | No | Up to 2000 characters. |
Example
curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/jobs/{jobId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"WAITING","resourceId":"resource_id","scheduledDate":"2026-11-03"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Job id. |
orderId | string | |
name | string | |
designId | string or null | |
areaName | string or null | |
methodId | string or null | |
methodType | enum or null | A decoration method type. One of SCREEN_PRINT, EMBROIDERY, DTG, DTF, HEAT_TRANSFER, SUBLIMATION, LASER, PAD_PRINT, UV_PRINT, LARGE_FORMAT_PRINT. |
quantity | integer | |
status | enum | WAITING (the order isn't ready), QUEUED, IN_PROGRESS, DONE. One of WAITING, QUEUED, IN_PROGRESS, DONE. |
outsourced | boolean | Sent to an outsourced decorator (vendorId). |
vendorId | string or null | |
resourceId | string or null | The press or machine it is planned on. |
scheduledDate | string or null | |
sortOrder | integer | |
estimatedMinutes | integer | |
assignedUserId | string or null | |
startedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
notes | string or null | |
order | object | |
order.id | string | |
order.identifier | string | |
order.title | string | |
order.status | enum | AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS (gates, moved by the server), READY (for production), IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. One of AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS, READY, IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. |
order.dueDate | string or null | |
order.rush | boolean | |
resource | object or null | |
resource.id | string | |
resource.name | string | |
vendor | object or null | |
vendor.id | string | |
vendor.name | string | |
method | object or null | |
method.id | string | |
method.name | string | |
design | object or null | |
design.id | string | |
design.name | string |
The production schedule
GET /organizations/{organizationId}/production/schedule
Each active press's planned minutes against its capacity, day by day from from (default today) for days (default 14, at most 62), with the open jobs. over marks a day planned past capacity. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | productionJobs_schedule (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
days | query | integer | No | 1–62. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/schedule" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
from | string | |
days | integer | |
resources | array of object | |
resources[].id | string | Press or machine id. |
resources[].name | string | |
resources[].methodTypes | array of enum | The methods it runs; empty = any. |
resources[].unitsPerHour | number | |
resources[].setupMinutes | integer | |
resources[].hoursPerDay | number | |
resources[].workDays | array of integer | ISO weekdays it runs: 1 = Monday … 7 = Sunday. |
resources[].active | boolean | |
resources[].sortOrder | integer | |
resources[].notes | string or null | |
loads | object | |
jobs | array of object | |
jobs[].id | string | Job id. |
jobs[].orderId | string | |
jobs[].name | string | |
jobs[].designId | string or null | |
jobs[].areaName | string or null | |
jobs[].methodId | string or null | |
jobs[].methodType | enum or null | A decoration method type. One of SCREEN_PRINT, EMBROIDERY, DTG, DTF, HEAT_TRANSFER, SUBLIMATION, LASER, PAD_PRINT, UV_PRINT, LARGE_FORMAT_PRINT. |
jobs[].quantity | integer | |
jobs[].status | enum | WAITING (the order isn't ready), QUEUED, IN_PROGRESS, DONE. One of WAITING, QUEUED, IN_PROGRESS, DONE. |
jobs[].outsourced | boolean | Sent to an outsourced decorator (vendorId). |
jobs[].vendorId | string or null | |
jobs[].resourceId | string or null | The press or machine it is planned on. |
jobs[].scheduledDate | string or null | |
jobs[].sortOrder | integer | |
jobs[].estimatedMinutes | integer | |
jobs[].assignedUserId | string or null | |
jobs[].startedAt | string (date-time) or null | |
jobs[].completedAt | string (date-time) or null | |
jobs[].notes | string or null | |
jobs[].order | object | |
jobs[].order.id | string | |
jobs[].order.identifier | string | |
jobs[].order.title | string | |
jobs[].order.status | enum | AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS (gates, moved by the server), READY (for production), IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. One of AWAITING_ART, AWAITING_PAYMENT, AWAITING_GOODS, READY, IN_PRODUCTION, READY_TO_SHIP, SHIPPED, COMPLETED, ON_HOLD, CANCELLED. |
jobs[].order.dueDate | string or null | |
jobs[].order.rush | boolean | |
jobs[].resource | object or null | |
jobs[].resource.id | string | |
jobs[].resource.name | string | |
jobs[].vendor | object or null | |
jobs[].vendor.id | string | |
jobs[].vendor.name | string | |
jobs[].method | object or null | |
jobs[].method.id | string | |
jobs[].method.name | string | |
jobs[].design | object or null | |
jobs[].design.id | string | |
jobs[].design.name | string |
Plan unscheduled jobs
POST /organizations/{organizationId}/production/schedule
Plans unscheduled jobs (all, or jobIds) onto presses by capacity from from: rush first, then the earliest in-hands date, each on the press that runs its method and fits it soonest. apply: true saves the plan; otherwise it is only proposed. Answers the suggestions (with late when after the in-hands date) and the jobs no press runs.
| Permission | production.manage (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | productionJobs_autoSchedule (toolset orders) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
from | string | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
jobIds | array of string | No | Up to 1000 items. |
apply | boolean | No |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/schedule" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"2026-11-03","jobIds":["job_id"],"apply":true}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
suggestions | array of object | |
suggestions[].jobId | string | |
suggestions[].resourceId | string | |
suggestions[].scheduledDate | string | |
suggestions[].estimatedMinutes | integer | |
suggestions[].late | boolean | |
unplaced | array of string | |
applied | boolean |
List presses and machines
GET /organizations/{organizationId}/production/resources
The shop's presses, embroidery machines, printers and stations: the methods each runs, units per hour, set-up minutes, hours per day and working days. includeInactive adds retired ones. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | productionResources_list (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
includeInactive | query | boolean | No |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/resources" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | string | Press or machine id. |
items[].name | string | |
items[].methodTypes | array of enum | The methods it runs; empty = any. |
items[].unitsPerHour | number | |
items[].setupMinutes | integer | |
items[].hoursPerDay | number | |
items[].workDays | array of integer | ISO weekdays it runs: 1 = Monday … 7 = Sunday. |
items[].active | boolean | |
items[].sortOrder | integer | |
items[].notes | string or null |
Add a press or machine
POST /organizations/{organizationId}/production/resources
Adds a press or machine for the schedule. Names are unique. Defaults: any method, 100 units an hour, 15 minutes set-up, 8 hours a day, Monday to Friday.
| Permission | production.settings (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | productionResources_create (toolset orders) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Up to 120 characters. |
methodTypes | array of enum | No | Up to 10 items. |
unitsPerHour | number | No | 1–100000. |
setupMinutes | integer | No | 0–1440. |
hoursPerDay | number | No | 0.5–24. |
workDays | array of integer | No | Up to 7 items. |
active | boolean | No | |
sortOrder | integer | No | 0–1000. |
notes | string or null | No | Up to 2000 characters. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/resources" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Dana Whitfield"}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Press or machine id. |
name | string | |
methodTypes | array of enum | The methods it runs; empty = any. |
unitsPerHour | number | |
setupMinutes | integer | |
hoursPerDay | number | |
workDays | array of integer | ISO weekdays it runs: 1 = Monday … 7 = Sunday. |
active | boolean | |
sortOrder | integer | |
notes | string or null |
Change a press or machine
PATCH /organizations/{organizationId}/production/resources/{resourceId}
Changes the fields sent. Jobs already planned keep their estimate until moved. active: false retires it.
| Permission | production.settings (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | productionResources_update (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
resourceId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Up to 120 characters. |
methodTypes | array of enum | No | Up to 10 items. |
unitsPerHour | number | No | 1–100000. |
setupMinutes | integer | No | 0–1440. |
hoursPerDay | number | No | 0.5–24. |
workDays | array of integer | No | Up to 7 items. |
active | boolean | No | |
sortOrder | integer | No | 0–1000. |
notes | string or null | No | Up to 2000 characters. |
Example
curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/resources/{resourceId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Dana Whitfield","methodTypes":["SCREEN_PRINT"],"unitsPerHour":1}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Press or machine id. |
name | string | |
methodTypes | array of enum | The methods it runs; empty = any. |
unitsPerHour | number | |
setupMinutes | integer | |
hoursPerDay | number | |
workDays | array of integer | ISO weekdays it runs: 1 = Monday … 7 = Sunday. |
active | boolean | |
sortOrder | integer | |
notes | string or null |
Delete a press or machine
DELETE /organizations/{organizationId}/production/resources/{resourceId}
Destructive: deletes it; jobs planned on it become unscheduled. Prefer active: false.
| Permission | production.settings (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | productionResources_delete (toolset orders) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
resourceId | path | string | Yes |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/production/resources/{resourceId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
ok | true |