Fulfillment: Required parameter missing or invalid

Topic summary

A developer is encountering errors when attempting to fulfill a Shopify order via the REST API fulfillments endpoint.

Initial Issue:

  • Received a 400 Bad Request error when submitting a fulfillment with only fulfillment_order_id in the payload
  • The original request was missing the fulfillment_order_line_items parameter

Shopify Support Response:

  • Clarified that the payload should include both fulfillment_order_id and fulfillment_order_line_items with id and quantity properties
  • Provided a structured example of the correct payload format

Subsequent Problem:

  • After adding the required line items parameters, the developer now receives a 404 Not Found error
  • Using API version 2020-04 with fulfillment_order_id: 4610371354793

Current Status:

  • Shopify support investigated using the X-Request-ID from logs
  • Determined that the specified fulfillment order ID does not exist on the store “skleptestowyintegratory.myshopify.com
  • Recommended verifying the fulfillment order exists using the AssignedFulfillmentOrder endpoint
  • Offered alternative support through authenticated partner account contact for deeper investigation

The issue appears to stem from referencing a non-existent fulfillment order rather than incorrect API usage.

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

Hello, i’m trying to fulfill an order:

POST https://xxx.myshopify.com/admin/api/2022-10/fulfillments.json HTTP/1.1
Authorization: Basic xxx=
Host: xxx.myshopify.com
Content-Type: application/json

{"fulfillment":{"notify_customer":false,"line_items_by_fulfillment_order":[{"fulfillment_order_id":4610371354793}]}}

but it always ends up with an error:

HTTP/1.1 400 Bad Request
Date: Mon, 12 Dec 2022 11:15:38 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-Sorting-Hat-PodId: 168
X-Sorting-Hat-ShopId: 54921035945
Referrer-Policy: origin-when-cross-origin
X-Frame-Options: DENY
X-ShopId: 54921035945
X-ShardId: 168
X-Stats-UserId: 
X-Stats-ApiClientId: 20011515905
X-Stats-ApiPermissionId: 386349203625
X-Shopify-API-Terms: By accessing or using the Shopify API you agree to the Shopify API License and Terms of Use at https://www.shopify.com/legal/api-terms
X-Shopify-API-Version: 2022-10
HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT: 1/40
X-Shopify-Shop-Api-Call-Limit: 1/40
Strict-Transport-Security: max-age=7889238
X-Shopify-Stage: production
Content-Security-Policy: default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https://* shopify-pos://*; block-all-mixed-content; child-src 'self' https://* shopify-pos://*; connect-src 'self' wss://* https://*; frame-ancestors 'none'; img-src 'self' data: blob: https:; script-src https://cdn.shopify.com https://cdn.shopifycdn.net https://checkout.shopifycs.com https://api.stripe.com https://mpsnare.iesnare.com https://appcenter.intuit.com https://www.paypal.com https://js.braintreegateway.com https://c.paypal.com https://maps.googleapis.com https://www.google-analytics.com https://v.shopify.com 'self' 'unsafe-inline' 'unsafe-eval'; upgrade-insecure-requests; report-uri /csp-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=5cfc6b9b-995c-4c58-bd07-03eb41176b34
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block; report=/xss-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=5cfc6b9b-995c-4c58-bd07-03eb41176b34
X-Dc: gcp-europe-west4,gcp-us-central1,gcp-us-central1
X-Request-ID: 5cfc6b9b-995c-4c58-bd07-03eb41176b34
CF-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=P92OqEpW0bgIPEDEVWslGipy%2FaQP%2FoHa9acYJGkfSO%2FyPRIqiSWasXHZOYLItARLDyCdiIFytHXo1iM2DYdPHCQFzQwg9W3nlSbQKOlzXawXoH%2BSDcLBeqK3Gw2J%2FgriphIgYAGWvACwNU4LK6rXJ5DjlN79EOk%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}
Server-Timing: cfRequestDuration;dur=277.999878
Server: cloudflare
CF-RAY: 77860b122c8858ea-TXL
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
Content-Length: 66

{"errors":{"fulfillment":"Required parameter missing or invalid"}}

Can you please tell me what am i doing wrong?

Hi @Janpaweł :waving_hand:

The [line_items_by_fulfillment_order parameter](Fulfillment - REST) should include fulfillment_order_id and each fulfillment_order_line_items should have the id and quantity properties. Your payload would look something like the below:

{
    "fulfillment": {
          ...
        "line_items_by_fulfillment_order": [
            {
                "fulfillment_order_id": 1234,
                "fulfillment_order_line_items": [
                    {
                        "id": 4321,
                        "quantity": 10
                    }
                ]
            },
            {
                "fulfillment_order_id": 5678,
                "fulfillment_order_line_items": [
                    {
                        "id": 8765,
                        "quantity": 11
                    }
                ]
            }
        ]
    }
}

Hope that helps!

Hello, thank you for your help.

Your documentation (https://shopify.dev/api/admin-rest/2022-10/resources/fulfillment#post-fulfillments) says fulfillment_order_line_items is not mandatory:

fulfillment_order_line_items: (array) The fulfillment order line items and the quantity of each which should be fulfilled. If this property is undefined, then all of the fulfillment order line items of the associated fulfillment order are fulfilled.

Anyway, i followed your tips and now i have an 404.

Request:

POST https://skleptestowyintegratory.myshopify.com/admin/api/2020-04/fulfillments.json HTTP/1.1
Authorization: Basic xxx
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.6.10.0
Content-Type: application/json
Host: skleptestowyintegratory.myshopify.com
Content-Length: 160
Accept-Encoding: gzip, deflate

{"fulfillment":{"line_items_by_fulfillment_order":[{"fulfillment_order_id":4610371354793,"fulfillment_order_line_items":[{"id":11533833568425,"quantity":1}]}]}}

Response:

HTTP/1.1 404 Not Found
Date: Tue, 13 Dec 2022 08:46:38 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-Sorting-Hat-PodId: 168
X-Sorting-Hat-ShopId: 54921035945
Vary: Accept-Encoding
Referrer-Policy: origin-when-cross-origin
X-Frame-Options: DENY
X-ShopId: 54921035945
X-ShardId: 168
X-Stats-UserId: 
X-Stats-ApiClientId: 20011515905
X-Stats-ApiPermissionId: 386349203625
X-Shopify-API-Terms: By accessing or using the Shopify API you agree to the Shopify API License and Terms of Use at https://www.shopify.com/legal/api-terms
X-Shopify-API-Version: 2022-01
X-Shopify-API-Version-Warning: https://shopify.dev/concepts/about-apis/versioning
HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT: 1/40
X-Shopify-Shop-Api-Call-Limit: 1/40
Strict-Transport-Security: max-age=7889238
X-Shopify-Stage: production
Content-Security-Policy: default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https://* shopify-pos://*; block-all-mixed-content; child-src 'self' https://* shopify-pos://*; connect-src 'self' wss://* https://*; frame-ancestors 'none'; img-src 'self' data: blob: https:; script-src https://cdn.shopify.com https://cdn.shopifycdn.net https://checkout.shopifycs.com https://api.stripe.com https://mpsnare.iesnare.com https://appcenter.intuit.com https://www.paypal.com https://js.braintreegateway.com https://c.paypal.com https://maps.googleapis.com https://www.google-analytics.com https://v.shopify.com 'self' 'unsafe-inline' 'unsafe-eval'; upgrade-insecure-requests; report-uri /csp-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=7c843ccd-c628-4791-a8ad-a9bdfeb2781c
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block; report=/xss-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=7c843ccd-c628-4791-a8ad-a9bdfeb2781c
X-Dc: gcp-europe-west4,gcp-us-central1,gcp-us-central1
X-Request-ID: 7c843ccd-c628-4791-a8ad-a9bdfeb2781c
CF-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=OPxVzVFBw%2BnwDALuwTHdaxScCcDhHiVZ%2FdfnY8TMvVC6R%2FGVRHiXx4tsEDY2mEMMs0ewdLsBCFDEImv6a5fdkfSe8TS%2F2pAAtP4qQSSZBpqWnpZCw6bqg8%2FzQ7aPAhHGdPffSW8PAvoPFjL9O23se9kAXMAKDZo%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}
Server-Timing: cfRequestDuration;dur=230.999947
Server: cloudflare
CF-RAY: 778d6e2f0bd9266d-TXL
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
Content-Length: 22

{"errors":"Not Found"}

My previous reply disappeared?

Anyway, now i got 404:

POST https://skleptestowyintegratory.myshopify.com/admin/api/2020-04/fulfillments.json HTTP/1.1
Authorization: Basic xxx
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.6.10.0
Content-Type: application/json
Host: skleptestowyintegratory.myshopify.com
Content-Length: 160
Accept-Encoding: gzip, deflate

{"fulfillment":{"line_items_by_fulfillment_order":[{"fulfillment_order_id":4610371354793,"fulfillment_order_line_items":[{"id":11533833568425,"quantity":1}]}]}}

resonse:

HTTP/1.1 404 Not Found
Date: Tue, 13 Dec 2022 11:07:42 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-Sorting-Hat-PodId: 168
X-Sorting-Hat-ShopId: 54921035945
Vary: Accept-Encoding
Referrer-Policy: origin-when-cross-origin
X-Frame-Options: DENY
X-ShopId: 54921035945
X-ShardId: 168
X-Stats-UserId: 
X-Stats-ApiClientId: 20011515905
X-Stats-ApiPermissionId: 386349203625
X-Shopify-API-Terms: By accessing or using the Shopify API you agree to the Shopify API License and Terms of Use at https://www.shopify.com/legal/api-terms
X-Shopify-API-Version: 2022-01
X-Shopify-API-Version-Warning: https://shopify.dev/concepts/about-apis/versioning
HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT: 1/40
X-Shopify-Shop-Api-Call-Limit: 1/40
Strict-Transport-Security: max-age=7889238
X-Shopify-Stage: production
Content-Security-Policy: default-src 'self' data: blob: 'unsafe-inline' 'unsafe-eval' https://* shopify-pos://*; block-all-mixed-content; child-src 'self' https://* shopify-pos://*; connect-src 'self' wss://* https://*; frame-ancestors 'none'; img-src 'self' data: blob: https:; script-src https://cdn.shopify.com https://cdn.shopifycdn.net https://checkout.shopifycs.com https://api.stripe.com https://mpsnare.iesnare.com https://appcenter.intuit.com https://www.paypal.com https://js.braintreegateway.com https://c.paypal.com https://maps.googleapis.com https://www.google-analytics.com https://v.shopify.com 'self' 'unsafe-inline' 'unsafe-eval'; upgrade-insecure-requests; report-uri /csp-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=83871a3a-050d-4946-adfd-78e3096dc572
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block; report=/xss-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Ffulfillments&source%5Bsection%5D=admin_api&source%5Buuid%5D=83871a3a-050d-4946-adfd-78e3096dc572
X-Dc: gcp-europe-west4,gcp-us-central1,gcp-us-central1
X-Request-ID: 83871a3a-050d-4946-adfd-78e3096dc572
CF-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=yHeDMO57gYYe8g0SNPeKQwiNeNnBuHwclKCBY%2FbjCgjpA96QG%2Bhupf0y5jlPgIsVNMAItNYkpCgt2RB4fboIYl%2FuWmxP9WV9pHVoKW%2B79uxDHgrxO2hX%2FOwrUgXjtt%2BnkbODLAqF0cAVs1M3vGGBjG2q2Aq7YEs%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}
Server-Timing: cfRequestDuration;dur=262.000084
Server: cloudflare
CF-RAY: 778e3cd3690658d8-TXL
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
Content-Length: 22

{"errors":"Not Found"}

ofc order an line ID’s are valid :wink:

Thanks for the new X-Request-ID!

The logs show that fulfillment order ID 4610371354793 is not found on the store “skleptestowyintegratory.myshopify.com”. I’d recommend using the AssignedFulfillmentOrder endpoint to verify this as well. Alternatively, you can contact us here with your authenticated parter account with permissions to this store/app and we’d be happy to take a closer look. Please be sure to provide the team with the same X-Request-ID (+timestamp) and reference this thread as well.