This is a common permission error that occurs when using an older, deprecated fulfillment endpoint. The solution is to use the modern Fulfillment Order workflow, which will work with your existing write_fulfillments scope. Instead of a single call, it is a two-part process.
First, you must fetch the specific fulfillment_order_id for the items you wish to ship by making a GET request to /admin/api/2025-07/orders/{order_id}/fulfillment_orders.json.
Once you have the fulfillment_order_id from that request, you can create the fulfillment.
You will make a POST request to the new, correct endpoint: /admin/api/2025-07/fulfillment_orders/{fulfillment_order_id}/fulfillments.json. The JSON payload for this request should be structured as follows:
By switching to this process of first fetching the fulfillment_order_id and then posting to the new endpoint, you will align with Shopify’s modern API practices, and the permission error will be resolved.