Using the latest version of 2025-07, the fulfillmentCreate mutation no longer shows the supplied message in the order history. I’m not sure when this stopped being shown to the user, but it definitely did show at some point in the not too distant past.
Example code:
const response = await this.admin.graphql(
`#graphql
mutation fulfillmentCreate($fulfillment: FulfillmentInput!, $message: String) {
fulfillmentCreate(fulfillment: $fulfillment, message: $message) {
fulfillment {
id
}
userErrors {
field
message
}
}
}`,
{
variables: {
fulfillment: {
lineItemsByFulfillmentOrder: {
fulfillmentOrderId: fulfillmentOrderId
},
trackingInfo: {
company: trackingCompany,
number: trackingNumber,
url: trackingUrl
},
notifyCustomer: true
},
message: 'Test message to show in order history',
},
},
);
And the order history:
When a message is supplied for other fulfillment mutations, e.g. acceptFulfillmentOrder, rejectFulfillmentOrder, then any supplied message is shown in the order history as expected.
Hey @gavinharriss,
I’m testing and I see the same as you. I’m checking to see if this is expected or not. Do you by chance have a screenshot of a past order where this is showing in the timeline?
Unfortunately I couldn’t find any old orders showing the message as previously I added a message in very rare circumstances. I only noticed the bug as I now intend to show a message always for fulfilled orders, adding the warehouse order number from the 3PL warehouse for easier tracking between systems if staff need to investigate an order.
Thanks for checking Gavin. Looking here we haven’t been able to find any recent changes that would have altered this behaviour.
Considering alternatives, would it work to use order metafields to store this message?
Perhaps the bug isn’t in the Admin GraphQL API but in Shopify itself with how it’s rendering the order history to the user? Maybe it’s not showing for specific message types anymore, which would explain why I couldn’t find an old order showing the message, which I’ve definitely seen shown in the past.
Is there a better place to raise these bug reports if this forum isn’t the place to do so?
I’ll take a look at the order metafields. I haven’t played with them yet, but I didn’t think they would show up in the order history which is the natural place for the message I’m adding to appear.
Hey Gavin,
Just to clarify, we do have an internal issue opened to look in to this further, so this is a good place to report these when you notice it.
Metafields won’t show in the order history timeline, but will show in the metafields below that.
Thanks for the clarification, much appreciated. I’ll just hang off for the bug fix in this instance as the message I’m adding is just useful for traceability between systems as a nice to have in this case.
Thanks for looking into this and raising the bug report.
@KyleG-Shopify it’s been a year since I raised this issue and it hasn’t been resolved yet. Are there any updates to the internal issue.
A new Shopify client has some requirements we are hoping to use this message field for.
Thanks in advance for any updates you can provide.
Hey @gavinharriss, thanks for the follow up. I’ve looked in to this and it is not resolved yet. I’ve shared additional feedback that this is still needed.
I then took a closer look at the codebase and from what I see, it isn’t expected to show in the order history currently, and I wasn’t able to see any regressions looking back at changes. Do you know approximately when it was that you saw this in a timeline?
For your new client, I would still encourage looking at other ways to store the message, such as order metafields.
Kia ora @KyleG-Shopify, it looks like I first started using the message from around December 2024 and I would have been using the latest stable GraphQL Admin API version at the time. Initially the message would make it into the Shopify order timeline.
In case it’s useful to know, from what I can tell, the GraphQL mutation fulfillmentCreate($fulfillment: FulfillmentInput!, $message: String) seems to discard the message as it isn’t available in the order events additionalContent, where the other messages are made available.
I was checking using the following query:
query OrderTimelineMessagesWithExtraByName($name: String!) {
orders(query: $name, first: 1) {
edges {
node {
id
name
events(first: 50) {
edges {
node {
id
message # main timeline message
createdAt
... on BasicEvent {
subjectType
action
additionalContent # extra text shown alongside the message
}
}
}
}
}
}
}
}
e.g. you can see the message makes it in for the fulfillment_order_accepted action:
but it doesn’t make it in for the subsequent fulfillment_success action, which also had a message provided:
Hopefully that gives you more clues about where to look for the breaking change.
I am using metafields to capture additional fulfilled item attributes such as serial numbers, but as this is for order fulfillments which can’t be an owner of metafields, I add them as user-unfriendly json against the parent order to allow for the possibility of multiple order fulfillments being spawned by the order. Using the message would allow me to provide direct useful info directly in the UI by default to all of the apps users, not just the power users who know how to query the json metafield / pull details in from it using Liquid.
Thanks for looking into this again, it’s much appreciated.
Thanks @gavinharriss the extra details are helpful and I’ve documented what you’ve shared, including why fulfillment-specific details need to be readable to staff, so it can be considered for a future update.
For the JSON you’re already storing on the order, another option would be an Admin UI block. It can read the order metafield, group the data by fulfillment, and display details such as warehouse references and serial numbers in a readable card directly on the order page.
It wouldn’t add the information to the native timeline, and the merchant would first have to add and pin the block. Once pinned, though, staff could view those details without querying the raw JSON or using Liquid.