Orders
Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Query Parameters
0 < value10 < value <= 50020length <= 100length <= 50"asc"Value in
- "asc"
- "desc"
Value in
- "PENDING"
- "REPLENISH"
- "ALLOCATED"
- "PICKING"
- "PICKED"
- "PACKING"
- "FULFILLED"
- "SHIPPED"
- "PARTIALLY_SHIPPED"
- "DELIVERED"
- "ON_HOLD"
- "CANCELLED"
- "BACKORDERED"
- "UNFULFILLABLE"
- "EXTERNALLY_FULFILLED"
- "MERGED"
Value in
- "true"
- "false"
Value in
- "true"
- "false"
Value in
- "true"
- "false"
Value in
- "true"
- "false"
Value in
- "master"
- "child"
- "any"
Value in
- "today"
- "yesterday"
- "monthToDate"
- "last30"
- "custom"
Value in
- "domestic"
- "international"
Value in
- "dueToday"
- "late"
- "upcoming"
- "undated"
- "committed"
- "onSchedule"
Value in
- "true"
- "false"
length <= 50"UTC"date-timeValue in
- "COURIER"
- "FREIGHT"
Header Parameters
Scope results to one client (brand). Resolve a client name to its id via GET /api/clients/lookup. Validated against the credential's tenant; ignored by a client-pinned credential.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders"{ "success": true, "data": [ { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "splitFrom": { "id": "string", "orderNumber": "string" }, "deliveredAt": "2019-08-24T14:15:22Z", "openShortLines": 0, "wholesaleAccountName": "string", "displayTotal": 0, "lineCount": 0, "previewItems": [ { "skuCode": "string", "skuName": "string", "imageUrl": "string" } ], "totalQuantity": 0, "totalValue": 0, "clientName": "string", "clientCode": "string", "channelName": "string", "warehouseName": "string", "currentTote": { "id": "string", "barcode": "string", "name": "string" } } ], "pagination": { "page": 0, "limit": 0, "total": 0, "totalPages": 0 }}Backend order intake. Omit warehouseId and the order lands where the client's routing rules send it, else in the client's default warehouse, which your 3PL sets (read it back as defaultWarehouseId on GET /api/clients/lookup); a tenant with a single warehouse needs no default. Once the tenant has two or more warehouses, every client needs a default. warehouseId pins the order to one warehouse and is for the 3PL's own tenant-wide credentials (and staff): a client-pinned credential sending it is refused with 403 — the warehouse is chosen by routing. GET /api/warehouse/warehouses lists the ids. The create is rejected when no warehouse can be resolved. orderNumber is unique per client: a repeat gets 409 with existingOrderId naming the order that already has it, whatever the body, so use an Idempotency-Key for safe retries rather than the number. The response is the stored order before auto-allocation runs; read it back for the allocated state.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders" \ -H "Content-Type: application/json" \ -d '{ "lines": [ { "skuId": "string", "quantity": 1 } ] }'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0, "lines": [ { "id": "string", "orderId": "string", "skuId": "string", "quantity": 0, "quantityAllocated": 0, "quantityPicked": 0, "quantityPacked": 0, "quantityShipped": 0, "quantityFulfilled": 0, "fulfilledExternally": true, "unitPrice": 0, "presentmentUnitPrice": 0, "taxAllocated": 0, "presentmentTaxAllocated": 0, "discountAllocated": 0, "presentmentDiscountAllocated": 0, "status": "PENDING", "isKitParent": true, "kitParentLineId": "string", "channelLineId": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sku": { "skuCode": "string", "name": "string", "weight": 0, "nonPhysical": true } } ] }}Orders that cannot allocate, grouped by the SKU blocking them, with a diagnosis of AWAITING_PUTAWAY (stock on site but in a non-pickable bin — allocation cannot reach it), AWAITING_RESTOCK (nothing usable, inbound open) or OUT_OF_STOCK. Groups are ordered by how many orders each unblocks. Considers PENDING, BACKORDERED and PARTIALLY_SHIPPED orders only — a resting split still owes units its remainder cannot allocate.
Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Query Parameters
Maximum groups to return (default 200).
0 < value <= 500Header Parameters
Scope results to one client (brand). Resolve a client name to its id via GET /api/clients/lookup. Validated against the credential's tenant; ignored by a client-pinned credential.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/blocked"{ "success": true, "data": [ { "skuId": "string", "skuCode": "string", "skuName": "string", "orderCount": 0, "unitsShort": 0, "onHand": 0, "pickable": 0, "stuckInNonPickable": 0, "reserved": 0, "approxAvailable": 0, "additionalUnitsNeeded": 0, "diagnosis": "ALLOCATABLE_NOW", "inbound": [ { "shipmentNumber": "string", "expected": 0, "received": 0 } ], "earliestRequiredShipDate": "2019-08-24T14:15:22Z", "highestPriority": "STANDARD", "orders": [ { "id": "string", "orderNumber": "string", "status": "PENDING", "priority": "STANDARD", "requiredShipDate": "2019-08-24T14:15:22Z", "unitsShort": 0, "clearableNow": true } ] } ]}Searches by orderNumber (exact, then partial) and externalOrderId, INCLUDING cancelled and deactivated orders. When nothing matches, returns per-channel intake health and a diagnosis: CHANNEL_SYNC_FAILING, ORDER_SYNC_DISABLED, CHANNEL_DISCONNECTED, INTAKE_STALLED (inferred from volume), ORDERS_NOT_IMPORTED (the latest sync fetched orders it could not import — notImportedOrders says which and why; answered first when one of them is the searched order), NO_CHANNELS_CONFIGURED or NO_INTAKE_PROBLEM_FOUND. At least one of the two query parameters is required.
Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Query Parameters
Exact, then partial, match on the order number.
The sales channel's order id.
Header Parameters
Scope results to one client (brand). Resolve a client name to its id via GET /api/clients/lookup. Validated against the credential's tenant; ignored by a client-pinned credential.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/diagnose-missing"{ "success": true, "data": { "query": { "orderNumber": "string", "externalOrderId": "string" }, "matches": [ { "id": "string", "orderNumber": "string", "externalOrderId": "string", "status": "PENDING", "isActive": true, "clientName": "string", "channelName": "string", "createdAt": "2019-08-24T14:15:22Z", "splitFrom": { "id": "string", "orderNumber": "string" }, "matchedBy": "orderNumber" } ], "diagnosis": "FOUND", "suspects": [ "string" ], "channels": [ { "channelId": "string", "channelName": "string", "channelType": "SHOPIFY", "clientName": "string", "isActive": true, "orderSyncEnabled": true, "lastOrderSyncStatus": "string", "lastOrderSyncAt": "2019-08-24T14:15:22Z", "lastOrderSyncError": "string", "lastSuccessfulOrderSyncAt": "2019-08-24T14:15:22Z", "failingSince": "2019-08-24T14:15:22Z", "consecutiveFailures": 0, "ordersNotImported": 0, "notImportedOrders": [ { "orderNumber": "string", "externalOrderId": "string", "reason": "string" } ], "lastOrderReceivedAt": "2019-08-24T14:15:22Z", "ordersLast24h": 0, "avgOrdersPerDayPrior7d": 0 } ], "channelsComplete": true, "thresholds": { "staleIntakeHours": 0, "baselineDays": 0 } }}Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Path Parameters
Order id
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string"{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "splitFrom": { "id": "string", "orderNumber": "string" }, "splitSiblings": [ { "id": "string", "orderNumber": "string", "status": "PENDING", "warehouseId": "string", "warehouseName": "string" } ], "warehouseName": "string", "warehouseSource": "EXPLICIT", "routingRule": { "id": "string", "name": "string" }, "openShortLines": 0, "noteCount": 0, "attachmentCount": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "wholesaleAccount": { "id": "string", "name": "string" }, "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "financialStatus": "string", "totalOutstanding": 0, "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "partialShip": { "eligible": true, "source": "order", "inherited": { "eligible": true, "source": "channel" } }, "client": { "id": "string", "name": "string", "code": "string" }, "channel": { "id": "string", "name": "string", "type": "SHOPIFY" }, "lines": [ { "id": "string", "skuId": "string", "skuCode": "string", "skuName": "string", "skuImageUrl": "string", "quantity": 0, "quantityAllocated": 0, "quantityPicked": 0, "quantityPacked": 0, "quantityShipped": 0, "quantityFulfilled": 0, "fulfilledExternally": true, "unitPrice": 0, "presentmentUnitPrice": 0, "taxAllocated": 0, "presentmentTaxAllocated": 0, "discountAllocated": 0, "presentmentDiscountAllocated": 0, "status": "PENDING", "isKitParent": true, "kitParentLineId": "string", "channelLineId": "string", "customerLineKey": "string", "settledInFamily": 0, "lots": [ { "lotId": "string", "lotNumber": "string", "expiresAt": "2019-08-24T14:15:22Z", "quantity": 0, "status": "ACTIVE" } ], "pickLocations": [ "string" ] } ], "editLogs": [ { "id": "string", "action": "CREATED", "field": "string", "previousValue": null, "newValue": null, "notes": "string", "performedBy": { "firstName": "string", "lastName": "string", "email": "string" }, "createdAt": "2019-08-24T14:15:22Z" } ], "trackingEvents": [ { "id": "string", "status": "string", "rawStatus": "string", "description": "string", "location": "string", "carrier": "string", "occurredAt": "2019-08-24T14:15:22Z" } ], "reships": [ { "id": "string", "depth": "RELABEL", "reason": "LABEL_ERROR", "disposition": "RESTOCK", "status": "OPEN", "oldShipment": { "id": "string", "trackingNumber": "string" }, "newShipment": { "id": "string", "trackingNumber": "string" }, "notes": "string", "performedBy": { "firstName": "string", "lastName": "string", "email": "string" }, "createdAt": "2019-08-24T14:15:22Z", "lines": [ { "orderLineId": "string", "quantity": 0 } ] } ] }}Which fields are editable depends on the order's status: everything before allocation; address, notes and tags while it is being picked and packed; notes and tags once shipped. A field that is not editable in the current status is rejected with 400. A concurrent edit or status change is rejected with 409 — re-read the order and retry.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0 }}A client-pinned credential holds as its client (holdSource: CLIENT); a tenant-wide credential holds as the warehouse (holdSource: OPERATOR).
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/hold" \ -H "Content-Type: application/json" \ -d '{ "reason": "string" }'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0, "releasedUnits": 0 }}A client-pinned credential may release only a hold its client placed (holdSource: CLIENT); a hold placed by the warehouse, the system, the sales channel or a payment check is refused with 403. A tenant-wide credential may release any hold.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/release"{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0 }}Every hold reason and note on the order (WORK_STAGE_MACHINE §6.1), open rows first then newest. An order is ON_HOLD while any open row is blocking; holdReason / holdSource on the order mirror the newest open blocking row.
Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Path Parameters
Order id
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string/holds"{ "success": true, "data": [ { "id": "string", "orderId": "string", "kind": "OPERATOR_HOLD", "blocking": true, "source": "OPERATOR", "payload": null, "message": "string", "dedupeKey": "string", "releaseAt": "2019-08-24T14:15:22Z", "placedAt": "2019-08-24T14:15:22Z", "placedById": "string", "resolvedAt": "2019-08-24T14:15:22Z", "resolvedById": "string", "resolution": "RELEASED" } ]}Lifts one row: RELEASED (the default) for a hold reason, ACKNOWLEDGED for a note. A client-pinned credential may resolve only its client's own hold (CLIENT_HOLD) and a note that is not a warehouse decision; any other is refused with 403. A row that closed with another answer is refused with 409 (the same answer again changes nothing). The order stays ON_HOLD while another blocking row is open — the response says so (released, stillHeldFor).
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Hold id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/holds/string/resolve" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0, "released": true, "stillHeldFor": [ "OPERATOR_HOLD" ] }}Refused (400) once the order has shipped, and (409) when a parcel already has carrier scans or a live freight booking exists.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/cancel"{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0 }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. Pins the postage type (and optionally signature / insurance options) the label will be bought with, beating the client's automation rules. Send postageType: null to clear it. Refused once a label exists — void it first.
Authorization
oauth2 shipping:writeOAuth2 client-credentials grant.
In: header
Scope: shipping:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/postage-override" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "orderNumber": "string", "status": "PENDING", "priority": "STANDARD", "manualPostageType": "string", "manualPostageAccountId": "string", "manualServiceOptions": { "property1": null, "property2": null } }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. What POST /reship would do with the same inputs, with zero writes: the first gate that refuses (blocked), or the lines and parcel it would act on. Send action=reship with depth and reason.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Query Parameters
Value in
- "reship"
- "uncancel"
- "unmark"
- "abandon"
- "amend"
- "edit"
Value in
- "RELABEL"
- "REPICK"
Value in
- "LABEL_ERROR"
- "SERVICE_CHANGE"
- "LOST_OR_DAMAGED"
- "RETURNED_TO_SENDER"
- "MISPICK"
- "OTHER"
- "CLIENT_REQUEST"
Value in
- "WRITE_OFF"
- "NONE"
- "GOODWILL"
1 <= length1 <= length1 <= length1 <= length1 <= lengthResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string/reship/preview?action=reship"{ "success": true, "data": { "orderId": "string", "action": "reship", "depth": "RELABEL", "blocked": { "code": "string", "message": "string" }, "warnings": [ "string" ] }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. RELABEL retires the old label and buys a new one for the same box; REPICK sends the selected units again from stock (the order goes back through picking). Gated on the order's state — run the preview first; a refused gate is a 400 naming the reason.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/reship" \ -H "Content-Type: application/json" \ -d '{ "depth": "RELABEL", "reason": "LABEL_ERROR" }'{ "success": true, "data": { "reshipId": "string", "orderId": "string", "depth": "RELABEL", "newShipmentId": "string", "warnings": [ "string" ] }}Only UNFULFILLABLE orders can be re-queued; the order is re-allocated immediately.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/requeue"{ "success": true, "data": { "orderId": "string", "orderNumber": "string", "status": "FULLY_ALLOCATED", "lines": [ { "skuId": "string", "skuCode": "string", "requested": 0, "allocated": 0, "shortfall": 0 } ] }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. For orders fulfilled outside Canopy's label flow. Only allowed from FULFILLED.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/mark-shipped" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0 }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/mark-delivered" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "clientId": "string", "warehouseId": "string", "orderNumber": "string", "channelId": "string", "channelOrderId": "string", "splitFromOrderId": "string", "status": "PENDING", "priority": "STANDARD", "shippingMethod": "string", "shippingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "billingAddress": { "name": "string", "company": "string", "line1": "string", "line2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "phone": "string" }, "customerName": "string", "customerEmail": "string", "customerPhone": "string", "notes": "string", "giftNote": "string", "tags": [ "string" ], "holdReason": "string", "holdUntil": "2019-08-24T14:15:22Z", "holdSource": "OPERATOR", "channelEditReview": null, "isWholesale": true, "allowPartialShip": true, "wholesaleShipMode": "COURIER", "requiredShipDate": "2019-08-24T14:15:22Z", "totalAmount": 0, "currency": "string", "presentmentCurrency": "string", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "trackingNumber": "string", "carrierCode": "string", "postageTypeOverride": "string", "manualPostageType": "string", "postageTypeOverrideAccountId": "string", "manualPostageAccountId": "string", "serviceOptionsOverride": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "manualServiceOptions": { "signature": "STANDARD", "insurance": { "amount": 0, "currency": "string" } }, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "packedPriority": "STANDARD", "cancelledAt": "2019-08-24T14:15:22Z", "cancelSource": "OPERATOR", "financialStatus": "string", "totalOutstanding": 0, "wholesaleAccountId": "string", "wholesaleInstructions": "string", "stagingBinId": "string", "presentmentTotal": 0, "shippingAmount": 0, "presentmentShippingAmount": 0, "deliveredAt": "2019-08-24T14:15:22Z", "version": 0 }}Allowed until the order starts picking (PENDING, ON_HOLD, ALLOCATED, REPLENISH, BACKORDERED, UNFULFILLABLE, PARTIALLY_SHIPPED).
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/lines" \ -H "Content-Type: application/json" \ -d '{ "skuId": "string", "quantity": 1 }'{ "success": true, "data": { "id": "string", "skuId": "string", "skuCode": "string", "skuName": "string", "quantity": 0, "quantityAllocated": 0, "quantityPicked": 0, "quantityPacked": 0, "quantityFulfilled": 0, "fulfilledExternally": true, "unitPrice": 0, "status": "PENDING", "heldForReview": { "message": "string", "heldBy": [ { "id": "string", "orderNumber": "string", "warehouseId": "string" } ] } }}Before allocation (PENDING or ON_HOLD) quantity and price can both be edited. Once the order is ALLOCATED only a quantity decrease is accepted — no increase, no price change — and the line must still owe at least one unit afterwards. Wholesale orders refuse it. On a PICKING or PICKED order an API token is refused with 403: a reduction there retires pick work, which only warehouse staff can do, from the order in Canopy.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Order line id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/orders/string/lines/string" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "skuId": "string", "skuCode": "string", "skuName": "string", "quantity": 0, "quantityAllocated": 0, "quantityPicked": 0, "quantityPacked": 0, "quantityFulfilled": 0, "fulfilledExternally": true, "unitPrice": 0, "status": "PENDING", "heldForReview": { "message": "string", "heldBy": [ { "id": "string", "orderNumber": "string", "warehouseId": "string" } ] } }}Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Order line id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/api/orders/string/lines/string"{ "success": true, "data": { "success": true, "stagedForPutBack": 0, "heldForReview": { "message": "string", "heldBy": [ { "id": "string", "orderNumber": "string", "warehouseId": "string" } ] } }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. Run allocation for this order against current on-hand stock. Accepted while the order is PENDING, BACKORDERED or PARTIALLY_SHIPPED — safe to re-run as more stock lands; an order in any other status is rejected with 400.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/allocate"{ "success": true, "data": { "orderId": "string", "orderNumber": "string", "status": "FULLY_ALLOCATED", "lines": [ { "skuId": "string", "skuCode": "string", "requested": 0, "allocated": 0, "shortfall": 0 } ] }}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. Re-evaluate the client's automation rules against this order — use it after fixing whatever made the rules miss (a new mapping, a corrected address).
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/reprocess-rules"{ "success": true, "data": { "orderId": "string", "status": "PENDING", "cancelled": true, "applied": [ { "type": "string", "detail": "string" } ], "skipped": [ { "type": "string", "reason": "string" } ] }}Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Path Parameters
Order id
Query Parameters
0 < value10 < value <= 50020Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string/history"{ "success": true, "data": [ { "id": "string", "action": "CREATED", "field": "string", "previousValue": null, "newValue": null, "notes": "string", "performedBy": { "firstName": "string", "lastName": "string", "email": "string" }, "createdAt": "2019-08-24T14:15:22Z" } ], "pagination": { "page": 0, "limit": 0, "total": 0, "totalPages": 0 }, "trackingEvents": [ { "id": "string", "status": "string", "rawStatus": "string", "description": "string", "location": "string", "carrier": "string", "occurredAt": "2019-08-24T14:15:22Z" } ]}Tenant-wide credentials only. A credential pinned to one client is refused (403), as that client's portal users are; use a tenant-wide credential with X-Client-Id. Pick-list assignee(s), packer, tote, packing station, label and the stage timestamps. The packer is exact (PackRecord.packedById); the picker is the assignee of the pick list, since Canopy does not record a per-item picker. stage is derived from the work records, so a bought-but-unscanned label reads LABELLED_AWAITING_HANDOFF rather than SHIPPED.
Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Path Parameters
Order id
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string/handling"{ "success": true, "data": { "orderId": "string", "orderNumber": "string", "status": "PENDING", "clientName": "string", "warehouseName": "string", "stage": "NOT_STARTED", "location": { "kind": "NOT_PICKED_YET", "label": "string", "detail": "string" }, "timeline": { "createdAt": "2019-08-24T14:15:22Z", "allocatedAt": "2019-08-24T14:15:22Z", "pickedAt": "2019-08-24T14:15:22Z", "packedAt": "2019-08-24T14:15:22Z", "shippedAt": "2019-08-24T14:15:22Z", "deliveredAt": "2019-08-24T14:15:22Z" }, "picks": [ { "pickListId": "string", "status": "string", "strategy": "string", "zoneName": "string", "pickedByName": "string", "pickedByEmail": "string", "startedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z", "itemsTotal": 0, "itemsPicked": 0, "itemsShort": 0, "unitsExpected": 0, "unitsPicked": 0, "toteBarcode": "string" } ], "pack": { "packRecordId": "string", "status": "string", "packedByName": "string", "packedByEmail": "string", "stationName": "string", "startedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z", "itemsTotal": 0, "itemsVerified": 0 }, "shipment": { "shipmentId": "string", "trackingNumber": "string", "carrierService": "string", "status": "string", "shipDate": "2019-08-24T14:15:22Z", "voidedAt": "2019-08-24T14:15:22Z" }, "currentTote": { "barcode": "string", "name": "string" } }}Authorization
oauth2 orders:readOAuth2 client-credentials grant.
In: header
Scope: orders:read
Path Parameters
Order id
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/orders/string/notes"{ "success": true, "data": [ { "id": "string", "clientId": "string", "orderId": "string", "body": "string", "author": { "id": "string", "firstName": "string", "lastName": "string", "email": "string", "role": "string" }, "isEdited": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]}Append a note to the order's thread — the durable record of why the order was touched. Send an Idempotency-Key so a retry can't append a duplicate.
Authorization
oauth2 orders:writeOAuth2 client-credentials grant.
In: header
Scope: orders:write
Path Parameters
Order id
Header Parameters
Optional client-supplied key that makes this write safe to retry. A replay of a completed key returns the original response; an in-flight duplicate gets 409. A key is bound to the operation — method, URL and request body — and to the caller — the credential and its token scopes; reusing it with any of those changed gets 422.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/orders/string/notes" \ -H "Content-Type: application/json" \ -d '{ "body": "string" }'{ "success": true, "data": { "id": "string", "clientId": "string", "orderId": "string", "body": "string", "author": { "id": "string", "firstName": "string", "lastName": "string", "email": "string", "role": "string" }, "isEdited": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}