List Merge Candidates
GET/api/fulfillment-orders/:fulfillmentOrder/merge-candidates
Returns sibling pre-dispatch fulfillment orders on OTHER sales orders that could dispatch together with the anchor as ONE provider order (cross-order merge). Powers the "Mergeable orders found" nudge on the sales order fulfillment tab.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Eligibility — a candidate is included only if it (and the anchor):
- Is
status=openandrequest_statusin {unsubmitted,rejected} (pre-dispatch). - Belongs to a sales order that is NOT cancelled (a cancelled order's FOs are recalled; a stale Open FO is never offered).
- Is at the SAME warehouse, resolves to the SAME provider type + requested integration instance, and is NOT FBA-routed.
- Ships to the SAME shipping-address signature (name + company + address1 + address2 + city + province + zip + country_code) as the anchor.
- Is on a DIFFERENT sales order, and is either ungrouped or already in the anchor's merge group.
If the anchor is itself ineligible (not pre-dispatch, FBA, cancelled order, or no shipping address) an empty list is returned.
Response shape — data[] is an array of FulfillmentOrderMergeCandidateData:
fulfillment_order_id(int)sales_order_id(int)sales_order_number(string)customer_name(string | null)integration_instance_name(string | null)integration_instance_id(int | null)line_count(int)total_quantity(int)requested_shipping_method(string | null)integration_matches_anchor(bool) —falsewhen the candidate is from a different sales channel; the UI warns before merging.already_in_group(bool) —truewhen the candidate is already a member of the anchor's merge group.ship_by_date(string | null) — UTC ISO 8601; the candidate order's ship-by deadline, when set.hold_until_date(string | null) — UTC ISO 8601; the candidate order's hold-until ("do not ship before") date, when set.deliver_by_date(string | null) — UTC ISO 8601; the candidate order's deliver-by deadline, when set.
Auth: Bearer token.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.