Skip to main content

Syncing AfterShip Checkpoint Events to Shopify

Syncing AfterShip Checkpoint Events to Shopify: follow setup steps, configure key options, verify behavior, and troubleshoot workflow issues.

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):

  1. Exception

  2. Pending

  3. InfoReceived

  4. InTransit

  5. OutForDelivery

  6. AvailableForPickup

  7. AttemptFail

  8. 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.

order detail page

order list

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.

Did this answer your question?