How to Auto-Fulfill BigCommerce Orders with Shippit
Automate BigCommerce order fulfillment through Shippit's shipping platform.
What This Integration Does
Shippit aggregates Australian carriers (Australia Post, CouriersPlease, Aramex, and others) behind a single API, which means once you've integrated to Shippit you've effectively integrated to all of them. Pairing it with BigCommerce closes the loop: orders flow out of the store, Shippit picks a carrier and produces a label, and the tracking number flows back into BigCommerce so customers and your support team can see it.
This workflow runs on each new BigCommerce order. It quotes shipping options through Shippit, creates and books an order so a label is produced, fetches the label PDF, and updates the BigCommerce order with the tracking number plus a link to the label. Each step is idempotent enough to retry safely if a downstream call hiccups.
Prerequisites
- A BigCommerce connection with order read/write scopes (V2 or V3 API access).
- A Shippit connection (production or sandbox API key).
- Shippit merchant settings configured: pickup address, default packaging, and at least one carrier authorised on the account.
- Default product weights set in BigCommerce - Shippit's quotes are weight-driven.
Step 1: Webhook Trigger from BigCommerce
Drop a Trigger node and set type to Webhook. In BigCommerce, register the webhook for the store/order/created event pointing at the trigger URL. The webhook body only contains the order ID; you'll fetch the full payload in the next step.
Step 2: Fetch the Full Order
Add a Connector node pointing at bigcommerce and pick get-order. Pass {{ trigger.body.data.id }}. You need the full shipping address, line items, and customer details for Shippit.
Step 3: Build the Shippit Payload
Add a Transform node that maps the BigCommerce order shape into Shippit's order format:
{
"user_attributes": {
"email": "{{ step.order.billing_address.email }}",
"first_name": "{{ step.order.shipping_addresses[0].first_name }}",
"last_name": "{{ step.order.shipping_addresses[0].last_name }}"
},
"delivery_address": "{{ step.order.shipping_addresses[0].street_1 }}",
"delivery_suburb": "{{ step.order.shipping_addresses[0].city }}",
"delivery_state": "{{ step.order.shipping_addresses[0].state }}",
"delivery_postcode": "{{ step.order.shipping_addresses[0].zip }}",
"parcel_attributes": [
{ "qty": "{{ item.quantity }}", "weight": "{{ item.weight }}" }
]
}
Step 4: Quote, Create, and Book
Add three Connector nodes pointing at shippit:
get-quotes- returns ranked shipping options for the address and parcels.create-order- creates a Shippit order against the cheapest service that meets your delivery promise.book-order- moves the order from "draft" to "ready to ship" and triggers label production.
Wrap them in a Condition that only books if create-order succeeded, so a half-created order doesn't get charged.
Step 5: Retrieve the Label and Tracking
Add a Connector node on shippit with get-label, passing the Shippit tracking number from book-order. Store the resulting PDF URL on the order metadata, or push the PDF to a printer queue with an HTTP call to your label printer service.
Step 6: Update BigCommerce
Use a Connector node on bigcommerce with raw-api-request against the order shipments endpoint to create a shipment record containing the Shippit tracking number, carrier name, and tracking URL. This is what triggers BigCommerce's customer "your order has shipped" email.
Tips
- Use the Shippit sandbox until labels look right - production label generation costs money per label even for cancelled orders.
- For orders with multiple items going to the same destination, batch them into a single Shippit order rather than one per line item.
- Set up a separate workflow on a schedule that calls
track-orderand updates BigCommerce shipment status as items move through the network.
Common Pitfalls
- State abbreviations: BigCommerce stores Australian states as full names ("Victoria") but Shippit wants the two-letter code ("VIC"). Map them in the Transform step.
- Zero-weight products: Shippit rejects parcels with weight 0. Fail loudly with a Slack alert rather than silently swallowing.
- Webhook duplicates: BigCommerce can retry webhooks. Dedupe on order ID via a quick
find-documentsin mongodb before creating a Shippit order. - Sandbox vs production: a label from the sandbox is not valid for actual shipping. Make sure your Shippit connection is pointed at the right environment before going live.
Testing
Create a small BigCommerce test order with a valid Australian address and a low-weight item. Run the workflow once manually and confirm: a Shippit order appears, the label PDF is retrievable, and the BigCommerce order shows the tracking number on the shipment. Only after that should you enable the live webhook on the store.