Plan: Enterprise only Platform: Shopify
Overview
This guide explains how to sync the latest shipment checkpoint events from AfterShip to Shopify so your store always reflects the most recent shipment status. By pushing checkpoint updates directly into Shopify, you keep merchants and customers informed throughout the delivery lifecycle.
This integration uses Shopify’s GraphQL Admin API, specifically the FulfillmentEventInput object. For reference, see Shopify's Admin API Documentation.
Note: This feature is available on the Enterprise (ENT) plan only. Once the requirements below are met, it is enabled automatically — no additional configuration is required.
Your Shopify store must have the write_fulfillments permission granted to AfterShip
New stores — This permission is granted automatically when you install the AfterShip app. No action is needed.
Existing stores — If you connected your store before this feature was introduced, you may need to re-authorize AfterShip. To do so, reinstall the AfterShip app from your Shopify Admin to grant the required permission.
Primary use cases
Update Shopify whenever an AfterShip shipment checkpoint status changes.
Maintain a centralized view of fulfillment progress in Shopify.
Trigger Shopify automations using real-time shipping updates.
Field mapping
Important: Do not write back Expired events. AfterShip’s Expired status has no suitable Shopify equivalent field to map.
AfterShip Tracking Field | Shopify FulfillmentEventInput Field | Nullable |
checkpoint-datetime | happenedAt | Yes |
checkpoint-message | message | Yes |
checkpoint-status | status | No |
Status mapping
AfterShip Status | Shopify Status | Mapping Logic |
InfoReceived | LABEL_PRINTED | InfoReceived > LABEL_PRINTED |
InTransit | IN_TRANSIT | InTransit > IN_TRANSIT |
OutForDelivery | OUT_FOR_DELIVERY | OutForDelivery > OUT_FOR_DELIVERY |
AttemptFail | ATTEMPTED_DELIVERY | AttemptFail > ATTEMPTED_DELIVERY |
Delivered | DELIVERED | Delivered > DELIVERED |
AvailableForPickup | READY_FOR_PICKUP | AvailableForPickup > READY_FOR_PICKUP |
Exception- Failure | FAILURE | Exception > FAILURE |
Expired | N/A | Do not sync |
Pending | CONFIRMED | Pending > CONFIRMED |
Exception-Delayed | DELAYED | Exception > DELAYED |
Special case handling
1. Multiple tracking numbers per fulfillment
When a single fulfillment includes multiple tracking numbers with different statuses, choose the status with the highest priority from the list below.
Priority order (highest > lowest):
Exception
Pending
InfoReceived
InTransit
OutForDelivery
AvailableForPickup
AttemptFail
Delivered
Use the top-priority status as the one to write back to Shopify.
2. Multiple updates with the same status
Only write back to Shopify when the shipment’s checkpoint status actually changes.
✔ Write back when the status changes, even if the new status is earlier (i.e., a regression)
✘ Do not write back repeated events with the same status
This prevents unnecessary updates and API noise
What does it look like on Shopify
We do map with Shopify status Label_PRINTED and CONFIRMED, but Shopify will not display these two statuses on the page.
Only the new events of the shipments that happened after the feature is enabled can be pushed to Shopify.
After enabling the feature, we will start to push the tracking events to your Shopify stores, and they will be displayed on your order dashboard.
Conclusion
This integration lets AfterShip push precise, real-time shipment updates into Shopify. By following the field mapping, status mapping, and prioritization rules above, you ensure reliable, clean, and automation-ready fulfillment events inside the Shopify Admin.
If you need access to this feature, contact your Customer Support Manager to enable it for you.

