Channel API: tracking individual lines within a merchant-fulfilled order
About this article
This article explains how to track the outcome of each line in a merchant-fulfilled order with more than one line, using GET /v2/shipments and GET /v2/cancellations via the Channel API.
Table of contents
Submitting orders and tracking shipments
Matching shipments and cancelations to order lines
Calculating the status of an order line
- Example 1: an order with two lines
- Example 2: an order line with a quantity of 2
- Example 3: a larger order that completes over time
- Example 4: the whole order is canceled
Introduction
An order with more than one line does not always end the same way for every line. One item can ship while another is canceled, or the order can go out in two separate shipments. Follow each line through to its outcome to know what was shipped, what was canceled, and what is still open.
ChannelEngine supports partial shipments and partial cancelations, as long as the SAP system sends them. For an order with two items, that means:
- One item can be shipped while the other is canceled.
- The order can be fulfilled in two separate shipments.
- A single order line with a quantity of two or more can be split, e.g.: one unit shipped and one unit canceled.
Overview
Refer to the flowchart below to visualize how shipments and cancelations for a multi-line order travel between your channel, ChannelEngine, and the merchant.
Available API endpoints
Use these two endpoints to follow the outcome of each order line.
-
Retrieve cancelations:
GET /v2/cancellations
Use this endpoint to retrieve cancelations created since the date you pass increatedSince. -
Retrieve shipments:
GET /v2/shipments
Use this endpoint to retrieve shipments with statusCLOSED. Filter by date withFromDate,ToDate,UpdatedFromDate, orUpdatedToDate, or by order withChannelOrderNos. UsePageto move through longer result lists.
Submitting orders and tracking shipments
- Submit the order: submit the order with all items under a single Channel order no., e.g.: "CH-10482".
- Retrieve cancelations: when an item is canceled, call
GET /v2/cancellations. The response containsChannelOrderNo"CH-10482". Each entry inLinescontains the product number (MerchantProductNoandChannelProductNo) and the canceledQuantity. - Retrieve shipments: call
GET /v2/shipments. It works the same way. The response containsChannelOrderNo"CH-10482". Each entry inLinescontains the product number and the shippedQuantity.
Matching shipments and cancelations to order lines
Use this combination to match each cancelation or shipment to the right order line:
Channel order no. + product SKU + quantity
In the API, this is ChannelOrderNo + the product number in Lines (MerchantProductNo or ChannelProductNo, whichever you used when you submitted the order) + Quantity.
Compare these values against your original order. For each line, you can then calculate:
- What was shipped
- What was canceled
- What is still open (ordered quantity minus shipped and canceled quantities)
If more shipments or cancelations follow, they arrive as separate responses for the same Channel order no. Match them the same way.
Calculating the status of an order line
For every line of your original order, keep three numbers and update them each time a response arrives:
- Shipped: the sum of all shipped quantities for that Channel order no. and SKU
- Canceled: the sum of all canceled quantities for that Channel order no. and SKU
- Open: ordered quantity minus shipped minus canceled
A line is complete when Open is 0. An order is complete when every line is complete.
Examples
The examples go from simple to more realistic. SKUs, quantities, and the order of events are illustrative.
Example 1: an order with two lines
You submit order "CH-10482" with two lines:
| Channel order no. | SKU | Ordered quantity |
| CH-10482 | SKU-A | 1 |
| CH-10482 | SKU-B | 1 |
Later, GET /v2/shipments returns a shipment for SKU-A, and GET /v2/cancellations returns a cancelation for SKU-B:
| Call | Channel order no. | SKU | Quantity |
GET /v2/shipments |
CH-10482 | SKU-A | 1 |
GET /v2/cancellations |
CH-10482 | SKU-B | 1 |
Compared with the original order, SKU-A is shipped, SKU-B is canceled, and nothing is open. The order is complete.
Example 2: an order line with a quantity of 2
You submit order "CH-10482" with one line:
| Channel order no. | SKU | Ordered quantity |
| CH-10482 | SKU-A | 2 |
Scenario A, one unit shipped and one unit canceled: GET /v2/shipments returns a shipment for SKU-A with quantity 1, and GET /v2/cancellations returns a cancelation for SKU-A with quantity 1:
| Call | Channel order no. | SKU | Quantity |
GET /v2/shipments |
CH-10482 | SKU-A | 1 |
GET /v2/cancellations |
CH-10482 | SKU-A | 1 |
Ordered 2, shipped 1, canceled 1: nothing is open.
Scenario B, two separate shipments: GET /v2/shipments returns two responses for the same Channel order no. and SKU, each with quantity 1:
| Response | Channel order no. | SKU | Quantity | Still open |
| First shipment | CH-10482 | SKU-A | 1 | 1 |
| Second shipment | CH-10482 | SKU-A | 1 | 0 |
After the first shipment, 1 unit is still open (2 ordered minus 1 shipped). After the second shipment, nothing is open.
Scenario C, the whole line is canceled: GET /v2/cancellations returns SKU-A with quantity 2. Ordered 2, shipped 0, canceled 2: nothing is open, and nothing was shipped.
Example 3: a larger order that completes over time
This example follows one order from submission to completion. You submit order "CH-10482" with two lines:
| Channel order no. | SKU | Ordered quantity |
| CH-10482 | SKU-A | 3 |
| CH-10482 | SKU-B | 1 |
Three responses arrive, one after the other. After each one, update your totals:
| Moment | What arrives | SKU | Quantity received | Shipped | Canceled | Open |
| 1 | GET /v2/shipments |
SKU-A | 2 | 2 | 0 | 1 |
| 2 | GET /v2/cancellations |
SKU-A | 1 | 2 | 1 | 0 |
| 3 | GET /v2/shipments |
SKU-B | 1 | 1 | 0 | 0 |
Each moment tells you the following:
- Moment 1: SKU-A is partly shipped (2 of 3). One unit is still open. SKU-B did not move, so it is still fully open.
- Moment 2: the last unit of SKU-A is canceled. SKU-A is now complete (2 shipped + 1 canceled = 3). The order is not complete yet, because SKU-B is open.
- Moment 3: SKU-B ships. Every line has 0 open, so the order is complete.
Example 4: the whole order is canceled
You submit order "CH-10482" with SKU-A (quantity 1) and SKU-B (quantity 2). The lines are canceled in two separate responses:
| Response | Channel order no. | SKU | Quantity | Open after this response |
| First cancelation | CH-10482 | SKU-A | 1 | SKU-A: 0, SKU-B: 2 |
| Second cancelation | CH-10482 | SKU-B | 2 | SKU-A: 0, SKU-B: 0 |
No shipments arrive. Every line is fully canceled, so the order is complete.
Example requests
Retrieve all shipments for one order:
GET /v2/shipments?ChannelOrderNos=CH-10482
Retrieve cancelations created since a date:
GET /v2/cancellations?createdSince=2026-11-01T00:00:00Z
Possible outcomes
| What you see | What it means |
| Shipped = ordered quantity | The line is fully shipped. |
| Canceled = ordered quantity | The line is fully canceled. |
| Shipped + canceled = ordered quantity | The line is complete, with a mix of shipped and canceled units. |
| Shipped + canceled < ordered quantity | The line is partly done. More shipments or cancelations may follow. |
| Open = 0 on every line | The whole order is complete. |
Common errors
| Situation | What to do |
The same order appears in GET /v2/shipments more than once |
This is expected with split shipments. Match each response by Channel order no., SKU, and quantity, and add it to your totals. |
| A line is neither shipped nor canceled yet | Treat the line as open. A later shipment or cancelation can still arrive for the same Channel order no. |
| A partial shipment or cancelation is missing | Check whether the SAP system sent it. ChannelEngine can only pass on what SAP sends. |
Next steps
Combine Channel order no., product SKU, and quantity to match each shipment and cancelation to the right order line. Compare the results against your original order to see what is shipped, canceled, or open.
Comments
0 comments
Article is closed for comments.