There is no way to actually cancel fulfilments in a way that opens the fulfilment status so that it can fulfilled again through the API. I have tried cancelling both through the Admin UI and trough GraphQL. While both of those come up with no errors, the actual fulfilment status stays closed and the orders can’t be fulfilled through API anymore. Below is the error that we get when trying to fulfill orders again after cancellation. This issue has been unsolved for years and it’s time to resurrect and fix it.
{
fulfillment: null,
userErrors: [
{
field: [Array],
message: 'Fulfillment order XXXXXX has an unfulfillable status= closed.'
}
]
}
Edit:
To add - the API actually returns that the order is fulfillable, yet it can not be fulfilled again as can be seen above. Below is what the API returns on the fulfill status of the order.
"fulfillable": true,
"displayFulfillmentStatus": "UNFULFILLED",
My best guess is that the reason for this behaviour is that the endpoint requires fulfillmentOrderId and if we give an old one, obviously it is already closed. But there is no way to create a new one with GraphQL (REST works) as the endpoint requires this ID. How absolutely confusing.