DEV Community

choong
choong

Posted on

Build an Automated Order Fulfilment Workflow in Shopify with These 3 APIs

(Fulfilment? Fulfillment?)

Anyways, since I started with Shopify clients, I have observed many of them fulfill orders the same way:

  • They log into the dashboard
  • Check the order
  • Manually copy the address into a separate shipping portal like Shippo
  • Generate a shipping label
  • Download it
  • Print it
  • Finally, manually send a confirmation email to the customer

Repeat for every order.

It works, until it doesn't. When you're doing 50 orders a day, one person can't keep up, and mistakes start to cost you real money.

Here's how you can automate the whole thing with 3 APIs.


The workflow

Order placed on Shopify → Shippo generates the shipping label automatically → Resend sends the customer a confirmation email with tracking info.

Log in once or twice a day to review your dashboard. Everything else has already been done for you.


API #1 — Shopify (your system of record)

Shopify is where the order lives.

Rather than polling for new orders, you subscribe to the orders/create webhook topic, which fires a POST to your endpoint the moment a customer checks out.

POST https://{shop}.myshopify.com/admin/api/2025-01/webhooks.json

{
  "webhook": {
    "topic": "orders/create",
    "address": "https://your-app.com/webhooks/orders",
    "format": "json"
  }
}
Enter fullscreen mode Exit fullscreen mode

The payload gives you everything: customer name, shipping address, line items, order ID.

That's the input for the next step.

Tips: As of April 2025, Shopify requires new public apps to use the GraphQL Admin API. If you're building a private or custom app, the REST endpoint above still works fine.

API #2 — Shippo (shipping label generation)

Shippo connects to 85+ carriers and gives you a single API to generate labels across all of them.

Pricing is pay-as-you-go, labels start at around $0.05 per label fee on top of the carrier rate.

You call it in two steps: create a shipment object (which returns available rates), then purchase the label against your chosen rate.

Step 1 — Create shipment, get rates

POST https://api.goshippo.com/shipments/

{
  "address_from": { ...from Shopify store settings },
  "address_to": { ...from Shopify order payload },
  "parcels": [{ "length": "10", "width": "8", "height": "4",
                "distance_unit": "in", "weight": "2", "mass_unit": "lb" }]
}
Enter fullscreen mode Exit fullscreen mode

Step 2 — Purchase label

POST https://api.goshippo.com/transactions/

{
  "rate": "<rate_object_id from step 1>",
  "label_file_type": "PDF",
  "async": false
}
Enter fullscreen mode Exit fullscreen mode

The response gives you label_url (the printable PDF) and tracking_number. Both go into the next step.

API #3 — Resend (customer notification)

Resend is a developer-first transactional email API. Free tier covers 3,000 emails/month, no daily cap on paid plans, and the API is genuinely one of the cleanest out there right now.

You fire a single POST once you have the tracking number from Shippo:

POST https://api.resend.com/emails

{
  "from": "orders@yourstore.com",
  "to": ["customer@email.com"],
  "subject": "Your order is on its way 📦",
  "html": "<p>Hi [name], your order has shipped. Track it here: [tracking_url]</p>"
}
Enter fullscreen mode Exit fullscreen mode

Tips: Using the same endpoint, you can fire a second email asking for a review 48–72 hours later.


How Everything Works Together

Your app listens on a webhook endpoint.

When a customer creates a new order, Shopify fires orders/create, where you extract the shipping address, call Shippo to generate a label, then call Resend with the tracking number.

The whole chain runs in a few seconds.

A quick note on LLMs: if your catalog has inconsistent product weights or dimensions (common with handmade or variable goods), an LLM can sit between Shopify and Shippo to infer parcel specs from product descriptions — removing the last bit of manual input. Worth knowing, but not required to get started.


How about Shopify's built-in tools?

Shopify does have native shipping and email notification features, they work fine for the average merchants who are just getting started.

Once your order volume hits a certain threshold, you will need to customize the logic, rate-shop across carriers programmatically, or plug in your own notification timing and content.

All of these cannot be done easily without an app or a paid plan upgrade.

Building it yourself with these three APIs gives you full control and costs less at volume.


Final note: What this doesn't cover

Admittedly, inventory sync, returns, and international customs are separate problems that are not covered here.

Top comments (0)