UPS is free forever

Shipping carriers for Laravel, done right.

A unified API for UPS, FedEx, USPS, and DHL. Rates, labels, tracking, address validation, and rate shopping — all from one clean Laravel package suite.

UPS · FedEx · USPS · DHL

Why not just use EasyPost?

EasyPost / ShipStation

Per-label fees that compound at scale. You pay forever.

One-time license. No per-label fees. Ever.

Roll your own

2–4 weeks per carrier. OAuth flows, token caches, normalizers, webhook handlers.

Install in minutes. All of that is already done.

Generic PHP SDKs

No Laravel integration. Manual config, no events, no HTTP client.

Built for Laravel from day one. Service providers, events, config publishing.

Everything you need to ship

One unified API

Every carrier speaks the same interface. Swap carriers or add new ones without touching your application code.

Rate shopping built in

Query all carriers concurrently and surface the cheapest or fastest rate. No sequential waterfalls.

Laravel-native

Service providers, config files, Events, and the HTTP client — exactly how Laravel expects packages to work.

Fail-open by design

Carrier API down? License server unreachable? Your app keeps shipping. We never throw unless you ask us to.

Clean, expressive API

The same interface across every carrier. Your code doesn't care which carrier ships the package.

Integrate via native PHP in your Laravel app, or call the REST endpoints from any language or external system — both paths use the same data shapes.

PHPLaravel · native integration
// Rate shop across all carriers in one call
$rates = app(RateShopper::class)
    ->onlyServices([
        'UPS_GROUND',
        'FEDEX_GROUND',
        'USPS_GROUND_ADVANTAGE',
    ])
    ->shop(RateRequest::make(
        shipFrom: new ShipFrom(
            'Acme Inc', '123 Main St',
            'Chicago', 'IL', '60601'
        ),
        shipTo: new ShipTo(
            'Jane Smith', '456 Oak Ave',
            'Memphis', 'TN', '38118'
        ),
        packages: [
            new Package(5.0, new Dimensions(12, 10, 8)),
        ],
    ));

$cheapest = $rates->cheapest();
// ServiceType::USPS_GROUND_ADVANTAGE · $8.42 · 3 days

$fastest = $rates->fastest();
// ServiceType::UPS_OVERNIGHT · $48.12 · 1 day

// Create the shipment — ZPL for thermal, PDF for browser
$result = app('shipping.carrier.fedex')
    ->createShipment(new ShipmentRequest(
        shipFrom:    $origin,
        shipTo:      $destination,
        packages:    [$package],
        serviceCode: 'FEDEX_GROUND',
        labelFormat: LabelFormat::ZPL,
    ));

// Stream ZPL to a Zebra thermal printer
file_put_contents(
    '/dev/usb/lp0',
    base64_decode($result->labels[0]->data)
);

echo $result->trackingNumbers[0]; // 794644792798
REST APIany language · external systems
// Rate shop — POST /api/shipping/shop/rates
{
  "ship_from": {
    "name":    "Acme Inc",
    "street1": "123 Main St",
    "city":    "Chicago",
    "state":   "IL",
    "zip":     "60601"
  },
  "ship_to": {
    "name":    "Jane Smith",
    "street1": "456 Oak Ave",
    "city":    "Memphis",
    "state":   "TN",
    "zip":     "38118"
  },
  "packages": [
    { "weight": 5.0, "length": 12, "width": 10, "height": 8 }
  ],
  "services": [
    "UPS_GROUND", "FEDEX_GROUND", "USPS_GROUND_ADVANTAGE"
  ]
}

// 200 OK
{
  "rates": [
    { "carrier": "usps",  "service": "USPS_GROUND_ADVANTAGE",
      "price": 8.42,  "transit_days": 3 },
    { "carrier": "fedex", "service": "FEDEX_GROUND",
      "price": 11.70, "transit_days": 4 },
    { "carrier": "ups",   "service": "UPS_GROUND",
      "price": 14.22, "transit_days": 5 }
  ]
}

// Create shipment — POST /api/shipping/fedex/shipments
{
  "ship_from": { "...": "..." },
  "ship_to":   { "...": "..." },
  "packages":  [{ "weight": 5.0, "length": 12,
                  "width": 10,   "height": 8 }],
  "service_code": "FEDEX_GROUND",
  "label_format": "ZPL"
}

// 200 OK
{
  "tracking_numbers": ["794644792798"],
  "labels": [{ "format": "ZPL", "data": "^XA^CF0..." }],
  "total_charge": { "amount": 11.70, "currency": "USD" }
}
Label OutputZPL · PDF · PNG
^XA^CF,0,0,0^PR12^MD30^PW800^POI^CI13^LH0,20
^FO12,124^GB755,2,2^FS
^FO12,390^GB777,2,2^FS
^FO32,3^AdN,0,0^FWN^FH^FDFROM:^FS
^FO32,19^AdN,0,0^FWN^FH^FD^FS
^FO32,37^AdN,0,0^FWN^FH^FDWarehouse^FS
^FO32,55^AdN,0,0^FWN^FH^FD123 Main St^FS
^FO32,73^AdN,0,0^FWN^FH^FD^FS
^FO32,109^AdN,0,0^FWN^FH^FDUS ^FS
^FO224,3^AdN,0,0^FWN^FH^FD(555) 000-0001^FS
^FO28,742^A0N,24,24^FWN^FH^FDTRK#^FS
^FO28,800^A0N,27,32^FWN^FH^FD^FS
^FO136,712^A0N,27,36^FWN^FH^FD^FS
^FO32,91^AdN,0,0^FWN^FH^FDSpringfield IL 62701^FS
^FO478,3^AdN,0,0^FWN^FH^FDSHIP DATE: 15APR26^FS
^FO478,19^AdN,0,0^FWN^FH^FDACTWGT: 2.50 LB^FS
^FO478,37^AdN,0,0^FWN^FH^FDCAD: 0000000/FAPI2208^FS
^FO478,91^AdN,0,0^FWN^FH^FDBILL SENDER^FS
^FO39,136^A0N,39,39^FWN^FH^FDJane Customer^FS
^FO39,178^A0N,39,39^FWN^FH^FD^FS
^FO39,220^A0N,39,39^FWN^FH^FD456 Oak Ave^FS
^FO39,262^A0N,39,39^FWN^FH^FD**TEST LABEL - DO NOT SHIP**^FS
^FO39,347^AdN,0,0^FWN^FH^FD(555) 000-0002^FS
^FO39,304^A0N,43,40^FWN^FH^FDShelbyville IL 62702^FS
^FO719,304^A0N,43,40^FWN^FH^FD(US)^FS
^FO677,462^GB104,10,10^FS
^FO677,472^GB10,112,10^FS
^FO771,472^GB10,112,10^FS
^FO677,584^GB104,10,10^FS
^FO464,--^GB2,126,2^FS
^FO687,480^A0N,128,137^FWN^FH^FDH^FS
^FO654,402^A0N,43,58^FWN^FH^FDFedEx^FS
^FO663,448^AbN,11,7^FWN^FH^FDHome Delivery^FS
^FO791,493^A0N,13,18^FWB^FH^FDJ261026012001uv^FS
^FO9,136^A0N,21,21^FWN^FH^FDTO^FS
^FO21,412^BY2,2^B7N,10,5,14^FH^FWN^FH^FD[)>_1E01_1D0262702_1D840_1D804_1D794802659223_1DFDEG_1D4910221_1D105_1D_1D1/1_1D2.50LB_1DN_1D456 Oak Ave_1DShelbyville_1DIL_1DJane Customer_1E06_1D10ZGH007_1D12Z5550000002_1D20Z_1C_1D31Z9622080430004910221300794802659223_1D_1E_04^FS
^FO28,837^A0N,107,96^FWN^FH^FD^FS
^FO12,681^GB777,2,2^FS
^FO494,885^A0N,43,43^FWN^FH^FD^FS
^FO788,28^AbN,11,7^FWB^FH^FD58KJ3/087D/484B^FS
^FO95,746^A0N,53,40^FWN^FH^FD0000 0000 0000^FS
^FO409,695^A0N,51,38^FWN^FH^FB390,,,R,^FD                   ^FS
^FO404,747^A0N,51,38^FWN^FH^FB400,,,R,^FD                   ^FS
^FO413,799^A0N,40,40^FWN^FH^FB386,,,R,^FD                ^FS
^FO495,841^A0N,44,44^FWN^FH^FB298,,,R,^FD     62702^FS
^FO574,901^A0N,24,24^FWN^FH^FB120,,,R,^FD      ^FS
^FO695,885^A0N,43,43^FWN^FH^FB100,,,R,^FD   ^FS
^FO39,927^A0N,27,36^FWN^FH^FD0000 0000 0 (000 000 0000) 0 00 0000 0000 0000^FS
^FO75,968^BY3,2^BCN,200,N,N,N,N^FWN^FD>;9622080430004910221300000000000000^FS
^FO135,1028^A0N,128,137^FWN^FH^FDSAMPLE^FS
^FO478,55^AdN,0,0^FWN^FH^FDDIMMED: 12 X 8 X 6 IN^FS
^FO329,349^AbN,11,7^FWN^FH^FDREF: ^FS
^FO39,363^AbN,11,7^FWN^FH^FDINV: ^FS
^FO39,377^AbN,11,7^FWN^FH^FDPO: ^FS
^FO429,377^AbN,11,7^FWN^FH^FDDEPT: ^FS
^PQ1
^XZ
FedEx Home Delivery label rendered from ZPL

Ready to start shipping?

Install the free UPS package in seconds. Add FedEx, USPS, DHL, or the Rate Shopper for $49 each. One-time purchase, lifetime license.