Per-label fees that compound at scale. You pay forever.
One-time license. No per-label fees. Ever.
2–4 weeks per carrier. OAuth flows, token caches, normalizers, webhook handlers.
Install in minutes. All of that is already done.
No Laravel integration. Manual config, no events, no HTTP client.
Built for Laravel from day one. Service providers, events, config publishing.
Every carrier speaks the same interface. Swap carriers or add new ones without touching your application code.
Query all carriers concurrently and surface the cheapest or fastest rate. No sequential waterfalls.
Service providers, config files, Events, and the HTTP client — exactly how Laravel expects packages to work.
Carrier API down? License server unreachable? Your app keeps shipping. We never throw unless you ask us to.
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.
// 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// 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" }
}^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