How can I fix interface errors with shipping orders?

Topic summary

A developer is encountering an API error when attempting to fulfill a Shopify order using the /admin/api/2023-04/fulfillments.json endpoint.

The Issue:

  • The error message states: {"errors":{"line_items_by_fulfillment_order":"Expected Hash to be an Array"}}
  • This indicates a data structure mismatch in the request payload

Current Implementation:

  • Using fulfillment order ID and tracking information
  • The line_items_by_fulfillment_order parameter is being passed as a hash/object instead of an array

Technical Details:

  • Code includes cURL setup with SSL verification disabled
  • Tracking URL and number are being provided
  • Access token is properly configured

The core problem appears to be incorrect formatting of the line_items_by_fulfillment_order parameter, which Shopify’s API expects as an array rather than a single hash object. The discussion remains open with no resolution provided yet.

Summarized with AI on November 14. AI used: claude-sonnet-4-5-20250929.

I have received the shipment data for the order, as shown in the following figure

Next, I want to perform the shipping operation on the shipping order, using the interface:

admin/api/2023-04/fulfillments.json

The debugging code snippet is as follows:

$url = "https://494782508ceshi.myshopify.com/admin/api/2023-04/fulfillments.json";
$param = array();
$param['access_token'] = "********"; //Omitted for data security
$fulfillment = array();
$fulfillment['line_items_by_fulfillment_order'] = ['fulfillment_order_id' => '**'];
$fulfillment['tracking_info'] = ['number' => 'YT2331821292044240', "url" => "https://www.track718.com/en/detail?nums=YT2331821292044240"];
$param['fulfillment'] = $fulfillment;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
$responseText = curl_exec($curl);
curl_close($curl);

But the interface reported an error:

string(76) “{“errors”:{“line_items_by_fulfillment_order”:“expected Hash to be a Array”}}”

How should I adjust my code?