Orders API
REST endpoints for orders in SKUFlow: 19 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 |
|---|---|---|
| List orders | GET /organizations/{organizationId}/orders | read |
| Create an order by hand | POST /organizations/{organizationId}/orders | write |
| Get an order | GET /organizations/{organizationId}/orders/{orderId} | read |
| Change an order | PATCH /organizations/{organizationId}/orders/{orderId} | write |
| Delete an order | DELETE /organizations/{organizationId}/orders/{orderId} | sensitive |
| Make an order from an approved quote | POST /organizations/{organizationId}/quotes/{quoteId}/order | write |
| Make an order from an invoice | POST /organizations/{organizationId}/invoices/{invoiceId}/order | write |
| Make an order from a store's batch | POST /organizations/{organizationId}/stores/{storeId}/order | write |
| Preview a store's production batch | GET /organizations/{organizationId}/stores/{storeId}/order-batch | read |
| Mark lines' goods | POST /organizations/{organizationId}/orders/{orderId}/goods | write |
| Start production | POST /organizations/{organizationId}/orders/{orderId}/start | write |
| Finish production | POST /organizations/{organizationId}/orders/{orderId}/finish | write |
| Mark an order shipped | POST /organizations/{organizationId}/orders/{orderId}/ship | write |
| Complete an order | POST /organizations/{organizationId}/orders/{orderId}/complete | write |
| Put an order on hold | POST /organizations/{organizationId}/orders/{orderId}/hold | write |
| Resume an order | POST /organizations/{organizationId}/orders/{orderId}/resume | write |
| Cancel an order | POST /organizations/{organizationId}/orders/{orderId}/cancel | write |
| Preview buying for orders | GET /organizations/{organizationId}/orders/purchases/preview | read |
| Buy blanks and decoration for orders | POST /organizations/{organizationId}/orders/purchases | write |
List orders
GET /organizations/{organizationId}/orders
Orders (ORD-n), rush first then by in-hands date. view: open (not shipped, completed or cancelled), late (open and past due) or all; or one status; filter by customer, quote, invoice or store. Each has its units, jobs done and lines still waiting on goods. counts has how many orders are in each status. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | orders_list (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | enum | No | 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. |
view | query | enum | No | One of open, late, all. |
customerId | query | string | No | |
quoteId | query | string | No | |
invoiceId | query | string | No | |
storeId | query | string | No | |
query | query | string | No | Up to 200 characters. |
limit | query | integer | No | 1–200. |
offset | query | integer | No |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | string | Order id. |
items[].identifier | string | ORD-n. |
items[].title | string | |
items[].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[].source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
items[].customerId | string or null | |
items[].customer | object or null | |
items[].customer.id | string | |
items[].customer.name | string | |
items[].quoteId | string or null | |
items[].invoiceId | string or null | |
items[].storeId | string or null | |
items[].dueDate | string or null | In-hands date, YYYY-MM-DD. |
items[].rush | boolean | |
items[].paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
items[].depositCents | integer or null | |
items[].fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
items[].createdAt | string (date-time) | |
items[].updatedAt | string (date-time) | |
items[].units | number | |
items[].lineCount | integer | |
items[].jobCount | integer | |
items[].jobsDone | integer | |
items[].goodsWaiting | integer | Lines whose blanks are still needed or on order. |
total | integer | |
counts | object | |
today | string |
Create an order by hand
POST /organizations/{organizationId}/orders
Makes an order from lines typed or picked from the catalog (productVariantId; with designId the design's placements become jobs). For an approved quote use POST /quotes/{quoteId}/order, for an invoice POST /invoices/{invoiceId}/order, for a closed store POST /stores/{storeId}/order. The order starts at its first closed gate (art, payment, goods).
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_create (toolset orders) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
customerId | string or null | No | From GET /customers; null for stock made for the shelf. |
propertyId | string or null | No | The ship-to address. |
title | string or null | No | Up to 200 characters. |
dueDate | string or null | No | The in-hands date (YYYY-MM-DD). |
rush | boolean | No | |
paymentTerms | enum | No | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | No | 0–100000000. |
fulfillment | enum | No | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
notes | string or null | No | For the team: production notes. |
customerNotes | string or null | No | Shown to the customer in their portal. |
businessUnitId | string or null | No | |
invoiceId | string or null | No | The invoice it is billed on (payment is read from it). |
lines | array of object | Yes | Up to 500 items. |
lines[].description | string or null | No | What it is (default: the product's name). Up to 500 characters. |
lines[].productVariantId | string or null | No | A catalog variant (GET /products/{productId}): colour and size. |
lines[].designId | string or null | No | The design printed on it (GET /designs): makes the jobs. |
lines[].quantity | number | Yes | At most 1000000. |
lines[].unitPriceCents | integer | No | 0–100000000. |
lines[].goodsStatus | enum | No | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].personalization | array of object | No | Up to 10 items. |
lines[].personalization[].label | string | Yes | Up to 30 characters. |
lines[].personalization[].value | string | Yes | Up to 100 characters. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"lines":[{"quantity":1}]}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Get an order
GET /organizations/{organizationId}/orders/{orderId}
One order with its lines (colour, size, goods status, the purchase orders buying them), jobs (one per design placement: press, day, status), gates (art approved, payment cleared with paid and required amounts, goods ready), the production sheet (breakdown) and what the customer sees. Reading re-checks the gates. Read-only otherwise.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | orders_get (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Change an order
PATCH /organizations/{organizationId}/orders/{orderId}
Changes the fields sent on an open order. lines (before production only, and not once blanks were bought) replaces every line; jobs follow the designs. artApproved: true waives the art gate (approved by phone), paymentWaived: true the payment gate. Gates are re-checked. customerNotes shows in the customer's portal.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_update (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
customerId | string or null | No | From GET /customers; null for stock made for the shelf. |
propertyId | string or null | No | The ship-to address. |
title | string or null | No | Up to 200 characters. |
dueDate | string or null | No | The in-hands date (YYYY-MM-DD). |
rush | boolean | No | |
paymentTerms | enum | No | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | No | 0–100000000. |
fulfillment | enum | No | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
notes | string or null | No | For the team: production notes. |
customerNotes | string or null | No | Shown to the customer in their portal. |
businessUnitId | string or null | No | |
invoiceId | string or null | No | The invoice it is billed on (payment is read from it). |
lines | array of object | No | Up to 500 items. |
lines[].description | string or null | No | What it is (default: the product's name). Up to 500 characters. |
lines[].productVariantId | string or null | No | A catalog variant (GET /products/{productId}): colour and size. |
lines[].designId | string or null | No | The design printed on it (GET /designs): makes the jobs. |
lines[].quantity | number | Yes | At most 1000000. |
lines[].unitPriceCents | integer | No | 0–100000000. |
lines[].goodsStatus | enum | No | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].personalization | array of object | No | Up to 10 items. |
lines[].personalization[].label | string | Yes | Up to 30 characters. |
lines[].personalization[].value | string | Yes | Up to 100 characters. |
artApproved | boolean | No | |
paymentWaived | boolean | No |
Example
curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"customerId":"customer_id","propertyId":"property_id","title":"string"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Delete an order
DELETE /organizations/{organizationId}/orders/{orderId}
Destructive: deletes a CANCELLED order with its lines and jobs. Refused (409) when it isn't cancelled or purchase orders were made for it.
| Permission | orders.delete (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 | orders_delete (toolset orders) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
ok | true |
Make an order from an approved quote
POST /organizations/{organizationId}/quotes/{quoteId}/order
Turns an APPROVED (or invoiced) quote into an order: each size of a decorated product line becomes a line with its blank to buy, other lines are listed, one-time fees are left out; the design placements become jobs. Payment terms follow the deposit asked (DEPOSIT, else NONE) unless given. One order per quote (409) unless allowAnother.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_createFromQuote (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
quoteId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
dueDate | string or null | No | The in-hands date (YYYY-MM-DD). |
rush | boolean | No | |
fulfillment | enum | No | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
notes | string or null | No | |
allowAnother | boolean | No | Make a second order even though one exists. |
paymentTerms | enum | No | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | No | 0–100000000. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/quotes/{quoteId}/order" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"dueDate":"2026-11-03","rush":true,"fulfillment":"SHIP"}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Make an order from an invoice
POST /organizations/{organizationId}/invoices/{invoiceId}/order
Turns an invoice's lines into an order (decorated lines carry their sizes). Payment terms default to FULL (production waits for the invoice to be paid) unless given. One order per invoice (409) unless allowAnother.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_createFromInvoice (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
invoiceId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
dueDate | string or null | No | The in-hands date (YYYY-MM-DD). |
rush | boolean | No | |
fulfillment | enum | No | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
notes | string or null | No | |
allowAnother | boolean | No | Make a second order even though one exists. |
paymentTerms | enum | No | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | No | 0–100000000. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/invoices/{invoiceId}/order" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"dueDate":"2026-11-03","rush":true,"fulfillment":"SHIP"}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Make an order from a store's batch
POST /organizations/{organizationId}/stores/{storeId}/order
Turns a store's placed orders into one production order: one line per product, colour, size and design, personalised pieces kept apart with their names and numbers. Art and payment are not held (the store's designs and checkout covered them). One per store (409) unless allowAnother; see GET /stores/{storeId}/order-batch first.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_createFromStore (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
storeId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
dueDate | string or null | No | The in-hands date (YYYY-MM-DD). |
rush | boolean | No | |
fulfillment | enum | No | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
notes | string or null | No | |
allowAnother | boolean | No | Make a second order even though one exists. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/stores/{storeId}/order" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"dueDate":"2026-11-03","rush":true,"fulfillment":"SHIP"}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Preview a store's production batch
GET /organizations/{organizationId}/stores/{storeId}/order-batch
What POST /stores/{storeId}/order would make: units per product, colour and size across the store's placed orders, and the personalised pieces. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | orders_storeBatch (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
storeId | path | string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/stores/{storeId}/order-batch" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
A value of type any.
Mark lines' goods
POST /organizations/{organizationId}/orders/{orderId}/goods
Marks order lines' blanks: IN_STOCK (taken from the shelf), NOT_NEEDED (the customer's own goods, a service), RECEIVED (arrived without a purchase order) or NEEDED. When every line's goods are here the order moves on.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_setGoods (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
lineIds | array of string | Yes | Up to 500 items. |
goodsStatus | enum | Yes | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/goods" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"lineIds":["line_id"],"goodsStatus":"NEEDED"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Start production
POST /organizations/{organizationId}/orders/{orderId}/start
Moves a READY order to IN_PRODUCTION and queues its jobs. An order still waiting on art, payment or goods is refused (409) unless force: true, which waives the gates still closed.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_startProduction (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
force | boolean | No |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/start" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"force":true}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Finish production
POST /organizations/{organizationId}/orders/{orderId}/finish
Marks every job done and the order READY_TO_SHIP (or ready for pickup). Finishing the last job on the board does the same.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_finishProduction (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/finish" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Mark an order shipped
POST /organizations/{organizationId}/orders/{orderId}/ship
Marks the order SHIPPED (shipped, picked up or delivered); the customer's portal shows it. Open jobs are closed.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_ship (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/ship" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Complete an order
POST /organizations/{organizationId}/orders/{orderId}/complete
Closes a shipped (or ready) order as COMPLETED. It can't be changed afterwards.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_complete (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/complete" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Put an order on hold
POST /organizations/{organizationId}/orders/{orderId}/hold
Pauses an open order (its jobs stop) with a reason; resume returns it where it was.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_hold (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
reason | string or null | No | Up to 500 characters. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/hold" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"string"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Resume an order
POST /organizations/{organizationId}/orders/{orderId}/resume
Takes an order off hold: back to where it was (a gated order re-checks its gates).
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_resume (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/resume" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Cancel an order
POST /organizations/{organizationId}/orders/{orderId}/cancel
Cancels an order that hasn't shipped: jobs not started are removed. Purchase orders made for it stay (cancel them with the vendor: POST /purchase-orders/{purchaseOrderId}/cancel). Invoices are unchanged.
| Permission | orders.write (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_cancel (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/{orderId}/cancel" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Order id. |
identifier | string | ORD-n. |
title | string | |
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. |
source | enum | One of QUOTE, INVOICE, STORE, MANUAL. |
customerId | string or null | |
customer | object or null | |
customer.id | string | |
customer.name | string | |
quoteId | string or null | |
invoiceId | string or null | |
storeId | string or null | |
dueDate | string or null | In-hands date, YYYY-MM-DD. |
rush | boolean | |
paymentTerms | enum | What must be paid before production: NONE, DEPOSIT (depositCents, else any payment) or FULL. One of NONE, DEPOSIT, FULL. |
depositCents | integer or null | |
fulfillment | enum | SHIP, PICKUP or DELIVERY (by the shop). One of SHIP, PICKUP, DELIVERY. |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
propertyId | string or null | |
property | object or null | |
quote | object or null | |
quote.id | string | |
quote.identifier | string | |
invoice | object or null | |
invoice.id | string | |
invoice.identifier | string | |
invoice.totalCents | integer | |
invoice.amountPaidCents | integer | |
store | object or null | |
store.id | string | |
store.name | string | |
heldFrom | enum or null | 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. |
holdReason | string or null | |
notes | string or null | |
customerNotes | string or null | Shown to the customer in their portal. |
artApprovedAt | string (date-time) or null | |
paymentClearedAt | string (date-time) or null | |
goodsReadyAt | string (date-time) or null | |
productionStartedAt | string (date-time) or null | |
producedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
completedAt | string (date-time) or null | |
cancelledAt | string (date-time) or null | |
lines | array of object | |
lines[].id | string | |
lines[].description | string | |
lines[].productId | string or null | |
lines[].productVariantId | string or null | |
lines[].designId | string or null | |
lines[].colorName | string or null | |
lines[].size | string or null | |
lines[].quantity | number | |
lines[].unitPriceCents | integer | |
lines[].costCents | integer or null | Blank cost per unit (costing.read only). |
lines[].goodsStatus | enum | Blanks for the line: NEEDED, ORDERED (on a purchase order), RECEIVED, IN_STOCK (from the shelf), NOT_NEEDED. One of NEEDED, ORDERED, RECEIVED, IN_STOCK, NOT_NEEDED. |
lines[].quantityReceived | number | |
lines[].personalization | array of object | |
lines[].personalization[].label | string | |
lines[].personalization[].value | string | |
lines[].purchaseOrders | array of object | |
lines[].purchaseOrders[].id | string | |
lines[].purchaseOrders[].identifier | string | |
lines[].purchaseOrders[].status | string | |
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[].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[].purchaseOrders | array of object | |
jobs[].purchaseOrders[].id | string | |
jobs[].purchaseOrders[].identifier | string | |
jobs[].purchaseOrders[].status | string | |
gates | object | Where the order stands on art, payment and goods; paid so far and what is required. |
gates.artApproved | boolean | |
gates.paymentCleared | boolean | |
gates.goodsReady | boolean | |
gates.paidCents | integer | |
gates.requiredCents | integer | |
gates.totalCents | integer or null | |
customerStage | string | What the customer sees: ART_APPROVAL, PAYMENT, IN_PRODUCTION, READY, SHIPPED, COMPLETED… |
units | number | |
breakdown | any | Units per product and design by colour and size (the production sheet). |
today | string |
Preview buying for orders
GET /organizations/{organizationId}/orders/purchases/preview
What POST /orders/purchases would order for these orders, grouped by vendor: blanks still needed (from the vendor linked to the product's supplier, or none yet) and outsourced decoration (from the method's decorator, at its cost table). Read-only.
| Permission | purchasing.manage (Owner, Admin) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | orders_purchasePreview (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderIds | query | string or array of string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/purchases/preview?orderIds=string" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
A value of type any.
Buy blanks and decoration for orders
POST /organizations/{organizationId}/orders/purchases
Makes DRAFT purchase orders for orders: one per vendor for the blanks still needed (each line linked to its order line, which becomes ORDERED; a supplier's vendor is made when missing) and one per outsourced decorator for its jobs. Blanks with no vendor go to vendorId or are answered in linesWithoutVendor. Nothing is sent: POST /purchase-orders/{purchaseOrderId}/send. Receiving them moves the orders on.
| Permission | purchasing.manage (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | orders_createPurchases (toolset orders) |
| Plan | Inventory and purchasing: the Pro plan and up. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
orderIds | array of string | Yes | Up to 100 items. |
locationId | string or null | No | Where blanks arrive (default: the default stock location). |
vendorId | string or null | No | Buy blanks with no supplier from this vendor. |
expectedDate | string or null | No | A calendar date in the business's own calendar, YYYY-MM-DD. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/orders/purchases" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"orderIds":["order_id"]}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
purchaseOrders | array of object | |
purchaseOrders[].id | string | |
purchaseOrders[].identifier | string | |
purchaseOrders[].vendorId | string | |
purchaseOrders[].kind | string | |
purchaseOrders[].lines | integer | |
linesWithoutVendor | any | Lines that could not be bought (no vendor). |