Merchant API: retrieve orders
About this article
This article describes the GET /v2/orders endpoint in the Merchant API, covering its query parameters, response envelope, order identification and status fields, business order detection, and channel identification.
Table of contents
Identification and status fields
- Recognizing marketplace-fulfilled orders
- Recognizing business orders
- Identifying which channel an order came from
- Leveraging stock location data
- Retrieving order support per channel
Introduction
GET /v2/orders returns a paginated list of orders matching your filters. It gives you fine-grained control over which orders to retrieve — filtering by status, date range, channel, stock location, fulfillment type, and more. For polling-based integrations, use the FromUpdatedAtDate parameter to retrieve only orders that have changed since your last sync, keeping payloads small and processing fast.
Each order in the response includes a set of identification and status fields, two address objects (billing and shipping), a full set of financial totals in both base and original currency, and one or more arrays carrying the order line content. Orders also carry several channel identification fields — ChannelId and ChannelName are scoped to your account, while GlobalChannelId and GlobalChannelName are consistent across all merchants on ChannelEngine. For channel-specific routing logic in a multi-merchant integration, use GlobalChannelId as the reliable key.
This article covers the full set of query parameters, the response envelope structure, and the order-level fields returned by the endpoint, including guidance on recognizing business orders and identifying the source channel.
Retrieve orders with filters
GET /v2/orders returns a paginated list of orders matching your filters. Use this endpoint when you need fine-grained control over which orders to retrieve — for example, filtering by status, date range, channel, or acknowledgement state.
Query parameters
| Parameter | Type | Required | Description |
Statuses |
array of enum | Optional |
Filter by one or more order statuses: NEW, IN_PROGRESS, SHIPPED, CLOSED, CANCELED, RETURNED, REQUIRES_CORRECTION, AWAITING_PAYMENT, IN_BACKORDER, MANCO, IN_COMBI.
|
FromDateToDate
|
string (ISO 8601) | Optional | Filter by the order date on the channel. FromDate is inclusive; ToDate is exclusive. |
FromCreatedAtDateToCreatedAtDate
|
string (ISO 8601) | Optional | Filter by the date the order was created in ChannelEngine. FromCreatedAtDate is inclusive; ToCreatedAtDate is exclusive. |
FromUpdatedAtDateToUpdatedAtDate
|
string (ISO 8601) | Optional | Filter by the date the order was last updated in ChannelEngine. Inclusive/exclusive respectively. |
FromAcknowledgedDateToAcknowledgedDate
|
string (ISO 8601) | Optional | Filter by the date the order was acknowledged. Inclusive/exclusive respectively. |
FromClosedAtDateToClosedAtDate
|
string (ISO 8601) | Optional | Filter by the date the order was closed. Inclusive/exclusive respectively. |
MerchantOrderNos |
array of string | Optional | Filter by one or more of your own order references. |
ChannelOrderNos |
array of string | Optional | Filter by one or more channel order references. |
CommercialOrderNos |
array of string | Optional | Filter by commercial order numbers (the reference shown to customers, which may differ from the channel order number). |
EmailAddresses |
array of string | Optional | Filter by customer email address. |
ChannelIds |
array of integer | Optional | Limit results to specific channels. |
StockLocationIds |
array of integer | Optional | Filter orders by one or more stock location IDs. Useful when you operate multiple warehouses and want to process orders for a specific location independently — for example, running separate pick queues per warehouse. Stock location IDs are configured on ChannelEngine at Settings, Stock locations. See Leverage stock location data for more guidance. |
IsAcknowledged |
boolean | Optional | Filter on whether the order has been acknowledged. |
FulfillmentType |
enum | Optional | Filter by fulfilment type. |
ExcludeMarketplaceFulfilledOrdersAndLines
|
boolean | Optional | When true, excludes orders and lines fulfilled by the marketplace (for example, Amazon FBA or bol LVB). |
OnlyWithCancellationRequests
|
boolean | Optional | When true, returns only orders that contain a customer cancelation request. |
Page |
integer | Optional | Page number for paginated results. Defaults to page 1. |
FromUpdatedAtDate rather than fetching all orders on every cycle. Store the timestamp of your last successful sync and use it as the starting point for the next call — this keeps payloads small and processing fast.
Order statuses
Below are the descriptions of each order status:
NEW — received but not yet acknowledged by the merchantIN_PROGRESS — acknowledged and being processedSHIPPED — shipment registered; tracking sent to channelIN_BACKORDER — order is on hold due to insufficient stockMANCO — partially fulfilled; some lines could not be shippedIN_COMBI — waiting to be combined with other lines before shippingCLOSED — order completed; no further actions neededCANCELED — order canceled by the channel or customerRETURNED — goods returned by the customerREQUIRES_CORRECTION — order has a data issue that prevents processing; review requiredAWAITING_PAYMENT — payment not yet confirmed. Excluded by default — add explicitly to include.
Fulfillment types
Below are the possible values for FulfillmentType:
ALL — return all orders regardless of who fulfills themONLY_MERCHANT — all lines fulfilled by youONLY_CHANNEL — all lines fulfilled by the marketplace (e.g.: Amazon FBA, bol LVB)MIXED — some lines merchant-fulfilled, some marketplace-fulfilledINCLUDES_MERCHANT — at least one line is merchant-fulfilled (includes ONLY_MERCHANT and MIXED)INCLUDES_CHANNEL — at least one line is marketplace-fulfilled (includes ONLY_CHANNEL and MIXED)
Response structure
Returns a paginated collection. The top-level envelope fields are:
| Field | Type | Description |
Content |
array | The list of order objects for this page. See order object fields below. |
Count |
integer | Number of orders returned in this page. |
TotalCount |
integer | Total number of matching orders across all pages. |
ItemsPerPage |
integer | The page size used for this response. |
Success |
boolean | true if the request completed successfully. |
Message |
string | A human-readable message, if relevant. |
RequestId |
string | Unique identifier for this API call. Include when contacting ChannelEngine Support about a specific request. |
LogId |
string | Internal log reference. Include alongside RequestId when raising a support query. |
Identification and status fields
Each order object inside Content contains the following identification and status fields.
| Field | Type | Description |
Id |
integer | ChannelEngine's internal order ID. Use this in the acknowledge call only — you do not need to store it afterwards. |
MerchantOrderNo |
string | Your own order reference, set during acknowledgement. null until the order is acknowledged. |
ChannelOrderNo |
string | The order reference used by the channel. Not guaranteed to be unique across all channels. |
CommercialOrderNo |
string | The customer-facing order reference used by the channel for commercial purposes (for example, shown on the invoice). May differ from ChannelOrderNo when the channel uses a separate internal ID. |
Status |
enum | Current order status. See the Statuses filter values for all possible values. |
IsBusinessOrder |
boolean |
true if the channel has classified this as a B2B order. See Recognizing business orders. |
IsTest |
boolean | true if this is a test order. Test orders can be used to verify your integration without processing real transactions. Filter these out in production by checking this field. |
ChannelOrderSupport |
enum | The order model the channel uses. Determines how acknowledgement and shipments should be structured. See Retrieving order support per channel. |
ChannelRefundSupport |
enum | The refund model the channel supports. |
ChannelReturnSupport |
object | [Closed Beta] Describes the return capabilities of the channel. Only populated for accounts in the Returns Closed Beta. Contains three sub-fields: SupportLevel (NONE / SUPPORT), CreatorSupport (who can initiate a return: ONLY_MERCHANT / ONLY_CHANNEL / BOTH), and SupportedHandlingActions (array of supported return handling actions for this channel). |
ChannelName / ChannelId |
string/integer | The name and ID of the channel connection within your ChannelEngine account. Account-scoped. See Identifying which channel an order came from. |
GlobalChannelName / GlobalChannelId
|
string/integer | The canonical channel name and ID across all of ChannelEngine. Consistent across all merchant accounts. See Identifying which channel an order came from. |
GlobalSalesChannelPluginInfoName / GlobalSalesChannelPluginInfoId
|
string/integer | The name and ID of the specific plugin version powering this channel integration. |
ChannelCustomerNo |
string | The unique customer reference used by the channel. Use this to identify repeat customers within a specific channel — for example, to check order history or apply loyalty rules. Note that the same physical customer will have different ChannelCustomerNo values across different channels, so this field is not suitable for cross-channel customer matching. Use Email for that instead. |
MerchantComment |
string | An internal merchant comment on the order. Set via PUT /v2/orders/comment. Visible only within ChannelEngine — not sent to the channel or the customer. Useful for warehouse notes, escalation flags, or tracking special handling instructions. |
Recognizing marketplace-fulfilled orders
Some channels fulfill orders on the merchant's behalf — Amazon FBA, bol.com LVB (Levering via bol), and similar programs. For these orders, the marketplace stores and ships the goods, so you do not need to (and should not) process them in your own fulfilment system.
There are two levels at which marketplace fulfilment can appear:
- Order level — check
FulfillmentTypeon the order. A value ofONLY_CHANNELmeans the entire order is fulfilled by the marketplace.MIXEDmeans some lines are marketplace-fulfilled and others are merchant-fulfilled. - Line level — check
IsFulfillmentByMarketplaceon each order line. When this istrue, that specific line is handled by the marketplace and you do not need to ship it.
To exclude marketplace-fulfilled orders and lines entirely from your retrieval results, set ExcludeMarketplaceFulfilledOrdersAndLines=true in your GET /v2/orders request. For mixed orders, this parameter removes the marketplace-fulfilled lines but keeps the merchant-fulfilled lines, so the order still appears in your results.
ExcludeMarketplaceFulfilledOrdersAndLines=true as a default in all order retrieval calls. This keeps your order queue clean and avoids unnecessary processing logic for lines you would discard anyway.
Recognizing business orders
The IsBusinessOrder boolean on the order object indicates whether ChannelEngine has classified the order as a B2B purchase. When this is true, you can expect:
- The
BillingAddress.CompanyNameto be populated. - A VAT number to be present in
VatNoon the order (for EU B2B transactions). - A chamber of commerce number to be present in
CompanyRegistrationNowhere the channel provides it. - Different invoicing requirements — many jurisdictions require a separate invoice format for B2B transactions, and some channels mandate invoice upload for all B2B orders.
Note that IsBusinessOrder reflects what the channel reported. Not all channels distinguish between B2B and B2C orders — in those cases this field will always be false, regardless of who actually placed the order.
Identifying which channel an order came from
Each order includes several fields for identifying its source channel. Understanding the difference between them helps when you need to apply channel-specific logic (different carriers, SLA rules, invoice formats, and so on):
| Field | Scope | When to use |
ChannelId |
Your account | The ID of the channel connection within your specific ChannelEngine account. Use this to distinguish between multiple connections to the same marketplace (for example, two separate Amazon accounts). This ID is account-scoped and differs between merchants. |
ChannelName |
Your account | The display name of the channel connection in your account. Often customized by the merchant (for example, "Amazon DE — Main"). |
GlobalChannelId |
All of ChannelEngine | The unique ID for this channel across the entire ChannelEngine platform. Consistent across all merchant accounts — use this for reliable channel-type identification when building integrations for multiple merchants. |
GlobalChannelName |
All of ChannelEngine | The canonical channel name across ChannelEngine (for example, "Amazon", "bol.com"). Stable and consistent regardless of how individual merchants have named their connection. |
GlobalSalesChannelPluginInfoId
|
All of ChannelEngine | The ID of the specific plugin version powering this channel integration. Useful for advanced diagnostic use cases, but not typically needed in order processing logic. |
GlobalSalesChannelPluginInfoName
|
All of ChannelEngine | The name of the plugin version (for example, "Amazon v3"). |
GlobalChannelId rather than ChannelId. The global ID is the same for all merchants connected to the same marketplace, making it a reliable key for rules like "use DHL for all Amazon orders" or "upload invoices for all bol.com orders".
Leveraging stock location data
A stock location in ChannelEngine represents a physical place from which you fulfil orders — a warehouse, a fulfilment centre, a retail store used for ship-from-store, or any other storage point. Every order line in ChannelEngine is assigned to a stock location, and the StockLocation object on each line tells you which one.
If you only operate one warehouse, stock locations are largely invisible — every line will always refer to the same single location. The field becomes important as soon as you have more than one fulfilment point.
Stock locations control three things in your integration:
- Order routing — ChannelEngine uses stock location rules to decide which warehouse should fulfil a given order line. These rules are configured in ChannelEngine and can be based on product availability, geography, or channel.
- Pick queue separation — in integrations with multiple warehouses, each warehouse typically polls orders filtered by its own
StockLocationIdusing theStockLocationIdsquery parameter. This ensures each warehouse only sees and processes lines assigned to it. - Stock level reporting — stock levels are tracked per location. When you update stock via the Offer endpoints, you push quantities at the stock location level.
To use stock locations in order processing:
- Find your stock location IDs — on ChannelEngine, go to Settings, Stock locations. Note the ID and name of each location. Alternatively, call
GET /v2/stocklocationsto retrieve them via the API. - Filter orders by location when polling — if each warehouse runs its own integration process, pass its
StockLocationIdas a filter:GET /v2/orders/new?stockLocationId={id}. This scopes the result to lines assigned to that location only. Each warehouse only retrieves and processes lines it is responsible for fulfilling. -
Read
StockLocation.Nameon each line — use this to route the pick within your warehouse management system, or to display the correct location label on a pick list. Lines assigned to different locations within one order can be fulfilled independently usingSPLIT_ORDERSorSPLIT_ORDER_LINESshipment models (see Retrieving order support per channel).
StockLocation on an order line reflects the assignment at the time the order was retrieved. If stock location rules change in ChannelEngine after an order is created, the assignment on existing orders does not update retroactively.
Example — multi-warehouse polling setup:
- Warehouse A (Id: 12) polls:
GET /v2/orders/new?stockLocationId=12 - Warehouse B (Id: 15) polls:
GET /v2/orders/new?stockLocationId=15 - Each warehouse only sees lines assigned to it. A single order with lines split across both warehouses appears in both queues — each warehouse fulfils its own lines.
Retrieving order support per channel
The ChannelOrderSupport field on the order tells you what order model the channel uses. This affects how you should process and acknowledge the order, and how shipment confirmations need to be structured.
| Value | What it means | How to handle it |
ORDERS |
The channel works with whole orders. All lines are acknowledged and shipped together as a single unit. | Standard processing. Acknowledge the order once and create a single shipment covering all lines. |
SPLIT_ORDERS |
The channel supports splitting an order into multiple shipments, each covering a subset of lines. | You can create multiple shipments for a single order. Use this when lines are shipped from different warehouses or at different times. Each shipment references the same MerchantOrderNo but covers different line items. |
SPLIT_ORDER_LINES |
The channel supports splitting individual order lines — for example, shipping part of a quantity on one shipment and the remainder on another. | You can create shipments that cover a partial quantity of a line. Specify the quantity being shipped for each line in your shipment payload. Useful when a line quantity cannot be fulfilled in full from a single pick. |
NONE |
The channel does not support order management via the API. Orders from this channel are informational only. | Do not attempt to acknowledge or create shipments for these orders via the API. Check the channel's documentation for the correct fulfilment process. |
ChannelOrderSupport reflects the capability of the channel, not a per-order setting. All orders from the same channel will have the same value. Check this field once per channel type and apply the appropriate shipment strategy for all orders from that channel.
Example response
{
"Content": [
{
"Id": 4829301,
"ChannelName": "bol.com - NL",
"ChannelId": 42,
"GlobalChannelName": "bol.com",
"GlobalChannelId": 7,
"GlobalSalesChannelPluginInfoId": 301,
"GlobalSalesChannelPluginInfoName": "bol.com v4",
"ChannelOrderSupport": "SPLIT_ORDER_LINES",
"ChannelRefundSupport": "NONE",
"ChannelReturnSupport": {
"SupportLevel": "NONE",
"CreatorSupport": "ONLY_MERCHANT",
"SupportedHandlingActions": []
},
"ChannelOrderNo": "CHAN-88234",
"CommercialOrderNo": "88234",
"MerchantOrderNo": null,
"Status": "NEW",
"IsBusinessOrder": false,
"IsTest": false,
"OrderDate": "2026-07-01T09:14:00Z",
"CreatedAt": "2026-07-01T09:20:11Z",
"UpdatedAt": "2026-07-01T09:20:11Z",
"AcknowledgedDate": null,
"ClosedAt": null,
"MerchantComment": null,
"Email": "customer@example.com",
"Phone": "+31612345678",
"LanguageCode": "nl",
"CurrencyCode": "EUR",
"CompanyRegistrationNo": null,
"VatNo": null,
"PaymentMethod": "iDEAL",
"PaymentReferenceNo": "TXN-9182736",
"ChannelCustomerNo": "CUST-00441",
"BillingAddress": {
"FirstName": "Jan",
"LastName": "de Vries",
"Gender": "MALE",
"CompanyName": null,
"AddressType": "HOME",
"StreetName": "Keizersgracht",
"HouseNr": "174",
"HouseNrAddition": "A",
"Line1": null,
"Line2": null,
"Line3": null,
"ZipCode": "1016 DW",
"City": "Amsterdam",
"Region": null,
"CountryIso": "NL",
"Original": null,
"PickupPointName": null,
"PickupPointNumber": null
},
"ShippingAddress": {
"FirstName": "Jan",
"LastName": "de Vries",
"Gender": "MALE",
"CompanyName": null,
"AddressType": "HOME",
"StreetName": "Keizersgracht",
"HouseNr": "174",
"HouseNrAddition": "A",
"Line1": null,
"Line2": null,
"Line3": null,
"ZipCode": "1016 DW",
"City": "Amsterdam",
"Region": null,
"CountryIso": "NL",
"Original": null,
"PickupPointName": null,
"PickupPointNumber": null
},
"SubTotalInclVat": 49.98,
"SubTotalVat": 8.68,
"SubTotalExclVat": 41.30,
"ShippingCostsInclVat": 4.95,
"ShippingCostsVat": 0.86,
"ShippingCostsVatRate": 0.21,
"ShippingCostsExclVat": 4.09,
"TotalInclVat": 54.93,
"TotalVat": 9.54,
"TotalExclVat": 45.39,
"SubTotalFee": 2.50,
"OrderFee": 0,
"TotalFee": 2.50,
"OriginalSubTotalInclVat": 49.98,
"OriginalSubTotalVat": 8.68,
"OriginalShippingCostsInclVat": 4.95,
"OriginalTotalInclVat": 54.93,
"OriginalTotalVat": 9.54,
"OriginalSubTotalFee": 2.50,
"OriginalOrderFee": 0,
"OriginalTotalFee": 2.50,
"Lines": [
{
"Id": 9102847,
"ChannelOrderLineNo": "CHAN-88234-1",
"ChannelProductNo": "CH-PROD-00291",
"MerchantProductNo": "SKU-BLUE-L",
"Gtin": "8710522914923",
"Description": "Blue Cotton T-Shirt - Large",
"Status": "NEW",
"Quantity": 2,
"CancellationRequestedQuantity": 0,
"IsFulfillmentByMarketplace": false,
"Condition": "NEW",
"UnitPriceInclVat": 24.99,
"UnitVat": 4.34,
"UnitPriceExclVat": 20.65,
"LineTotalInclVat": 49.98,
"LineVat": 8.68,
"LineTotalExclVat": 41.30,
"OriginalUnitPriceInclVat": 24.99,
"OriginalUnitVat": 4.34,
"OriginalLineTotalInclVat": 49.98,
"OriginalLineVat": 8.68,
"OriginalFeeFixed": 0,
"VatRate": 0.21,
"FeeFixed": 0,
"FeeRate": 0,
"LatestShipmentDate": "2026-07-04T00:00:00Z",
"ExpectedDeliveryDate": "2026-07-06T00:00:00Z",
"LatestDeliveryDate": "2026-07-08T00:00:00Z",
"ExactShipmentDate": null,
"ExactDeliveryDate": null,
"ExpectedShipmentDate": null,
"ShippingMethod": "PostNL",
"ShippingServiceLevel": "Standard",
"StockLocation": { "Id": 12, "Name": "Main Warehouse" },
"BundleProductMerchantProductNo": null,
"BundleOrderLineId": null,
"JurisCode": null,
"JurisName": null,
"ExtraData": [],
"ServiceLines": []
}
],
"BundleOrderLines": [],
"ServiceLines": [
{
"Id": 7712,
"Type": "DISCOUNT",
"AmountInclTax": -5.00,
"AmountTax": -0.87,
"TaxRate": 21,
"OriginalAmountInclTax": -5.00,
"OriginalAmountTax": -0.87,
"Description": "Summer promotion discount"
}
],
"ExtraData": null
}
],
"Count": 1,
"TotalCount": 1,
"ItemsPerPage": 100,
"StatusCode": 200,
"Success": true,
"Message": null,
"RequestId": null,
"LogId": null,
"ExceptionType": null,
"ValidationErrors": null
}
Comments
0 comments
Article is closed for comments.