Carrier for Craft CMS

Craft Commerce 5 · 16 carriers, free add-ons

One shipping gateway. A free add-on for every carrier.

ShipStation and Sendcloud stop at the markets they serve, and a home-grown label integration is the part of a store nobody wants to touch. Carrier does the hard part once — packing, checkout pricing, the locker picker, label buying that never buys twice, printing and tracking — so the part that differs per carrier is a small free plugin, from UPS to a Croatian Paketomat.

Carrier

What Carrier owns, so an add-on doesn't have to

An add-on translates one carrier's API into Carrier's shipment documents. Everything that has to be true of every carrier is here, written once.

It never buys the same label twice

Every purchase is claimed in the database before the carrier is called. A retried job, a double-clicked button and a bulk action run twice all find the claim and stop.

  • A timeout after the request left is never retried — it waits on Problems for a human to check the carrier's portal
  • A refusal can be fixed and retried on the same claim

Lockers and parcel shops at checkout

One line of Twig adds a picker for lockers, parcel shops, post offices and your own stores. The customer cannot pay until a point is chosen.

  • Daily-synced point lists searched locally, so checkout never waits on a carrier
  • Live search for UPS, FedEx and USPS; CSV import for carriers with no point API

Rates that fail open

Flat, weight-table or live rates with markup and rounding. A carrier that is down costs one method its live price — never the checkout.

  • A fallback price, or the method hidden, when the carrier does not answer
  • Quotes memoized on the whole cart and cached, because every cart view should not be a paid API call

Print the way your bench prints

PDF A4 sheets, A6 and 4×6 thermal, ZPL and PNG. Bulk from the order index as one print job — a carrier batch, a ZPL stream, a browser sheet or a ZIP.

  • Labels stored in the database, so Craft Cloud and load-balanced hosts work
  • Pruned after a set number of days; the shipment and its tracking stay

Tracking written back to the order

Polled until delivered — often at first, less as a parcel ages. Scans are stored once, a status never goes backwards, and the order moves on when every parcel has arrived.

  • Events for your own “out for delivery” emails, and a webhook endpoint for carriers that push
  • Collections and end-of-day closes, with the driver's manifest

A log that cannot leak your key

Every request and response is recorded with credentials redacted at the transport — including the ones a carrier echoes back in its own error message.

  • Connections live in the database, so a sandbox account never deploys to production
  • Every add-on passes the same conformance suite before it ships

A free add-on for every carrier

Install Carrier once, then the add-on for the carriers you ship with. Each one only translates its carrier's API — the packing, the checkout, the labels and the log are Carrier's, which is why the add-ons cost nothing.

Carrier for UPS

UPS

Rates, labels, returns and tracking through the UPS OAuth APIs, with Access Point lockers, pickups and address validation.

  • Live rates
  • Labels
  • Returns
  • Void
  • Tracking
  • Access Points
  • Pickups
  • Address check
craft-carrier-ups Docs →

Carrier for FedEx

FedEx

Rates, labels, returns and tracking through the FedEx REST APIs, with Hold at Location, pickups and address validation.

  • Live rates
  • Labels
  • Returns
  • Void
  • Tracking
  • Hold at Location
  • Pickups
  • Address check
craft-carrier-fedex Docs →

Carrier for USPS

USPS

Prices, domestic and international labels and tracking on the USPS APIs v3, with Hold for Pickup at Post Offices.

  • Live rates
  • Labels
  • Returns
  • Refunds
  • Reprint
  • Tracking
  • Post Offices
  • Pickups
  • Address check
craft-carrier-usps Docs →

Carrier for LTL Freight

TForce Freight, Old Dominion, Estes, XPO, R+L Carriers, SAIA

Six US LTL carriers in one add-on: quotes by handling unit and class, bills of lading, PRO tracking and pickups.

  • Live quotes
  • Bills of lading
  • PRO tracking
  • Pickups
  • Accessorials
craft-carrier-freight Docs →

Carrier for DPD

DPD Croatia, DPD Slovenia (EasyShip)

DPD through its EasyShip portal: labels, cash on delivery, parcel shops, collections and the daily manifest.

  • Labels
  • COD
  • Parcel shops (CSV)
  • Void
  • Reprint
  • Tracking
  • Collections
  • Manifest
craft-carrier-dpd Docs →

Carrier for GLS

GLS via MyGLS — HR, HU, CZ, RO, SI, SK, RS

Seven GLS countries through MyGLS: labels on A4 sheets or thermal, cash on delivery, parcel shops and lockers.

  • Labels
  • COD
  • Parcel shops
  • Lockers
  • Void
  • Batch print
  • Tracking
craft-carrier-gls Docs →

Carrier for BOX NOW

BOX NOW — GR, CY, BG, HR, SI

Locker delivery with the locker picker at checkout, cash on delivery, labels and tracking.

  • Lockers
  • Labels
  • COD
  • Void
  • Reprint
  • Tracking
craft-carrier-boxnow Docs →

Carrier for National Posts

Hrvatska pošta, Pošta Slovenije, Magyar Posta, ELTA Courier

Four national posts: Paketomat and PostaPont lockers, cash on delivery, labels, tracking and the end-of-day close.

  • Labels
  • COD
  • Lockers
  • Post offices
  • Tracking
  • Day close
craft-carrier-posts Docs →

Eight add-ons, sixteen carriers, plus store pickup and a Mock carrier built in. What each card lists is read from the carrier's own declaration. The add-ons were built from each carrier's published API documentation — test in the carrier's sandbox before you go live.

Carrier in the control panel

Real screens from a Craft 5 install running Commerce — your carrier accounts, a shipment with its tracking, a method's pricing, and the purchases that need a human.

The Carrier connections screen listing carrier accounts with their checkout methods, pickup points and status, and every installed carrier with the features it declares
The Carrier shipment screen for an order showing a delivered Mock Carrier shipment with its tracking number, charge, label download, Refresh, Reprint and Void buttons, and a four-scan tracking history
A Carrier checkout method set to a live rate with a 10 percent markup, a fallback price for when the carrier cannot be reached, free shipping over a subtotal and rounding up to the nearest half
The Carrier problems screen with one purchase that timed out, offering It was created and It was not created, and one the carrier refused, offering Try again

Screenshots from a live install running the built-in Mock carrier, not mockups.

The storefront half

The picker renders nothing unless the cart is on a pickup-point method, so it is safe to drop into any shipping step. Everything else is a read.

twig
{# On the shipping step: lockers, parcel shops and stores #}
{{ craft.carrier.pointPicker(cart) }}

{# Disable the Pay button until a point is chosen #}
{% if craft.carrier.needsPoint(cart) %}
    <p>Choose where to collect your parcel.</p>
{% endif %}

{# On the order page: every parcel, tracked #}
{% for shipment in craft.carrier.shipments(order) %}
    <a href="{{ shipment.trackingUrl }}">{{ shipment.trackingNumber }}</a>
    — {{ shipment.trackingStatusLabel }}
    {% for event in craft.carrier.events(shipment) %}
        {{ event.occurredAt|date('short') }} {{ event.description }}
    {% endfor %}
{% endfor %}

Frequently Asked Questions

The questions worth answering before you install it.

One price, every carrier

Carrier is $149 with a $129 annual renewal, single edition. The add-ons for your carriers are free, and so is the Mock carrier you can try the whole thing on first.