What Is FedEx SmartPost? Ground Economy and the API
FedEx SmartPost is now called FedEx Ground Economy. It is the same service under a new name, and both FedEx and RocketShipIt still accept SMART_POST as the service code, so existing integrations keep working.
What is FedEx SmartPost?#
SmartPost is a hybrid service: FedEx picks the package up, sorts it, and moves it across the country, then hands it to the U.S. Postal Service for the last mile. The mail carrier who already visits the address every day makes the actual delivery.
That split is the whole point. FedEx does the part it is good at — long-haul line-haul between sort hubs — and skips the expensive part, driving a truck down a residential street for one parcel. The result is cheaper than FedEx Ground for the kind of package that does not need to arrive quickly:
- low weight (under about 10 lb is where it pays)
- low value
- residential destination
- not time-sensitive
In exchange you give up speed and control. Transit is typically 2–7 business days, there is no guaranteed delivery commitment, and once USPS has the package your FedEx tracking goes quiet until the postal scan events arrive.
UPS has an equivalent service, UPS Ground Saver (formerly SurePost), and a higher-volume mailing product, UPS Mail Innovations. They work the same way and have the same trade-offs.
Is SmartPost the same as USPS?#
Not quite, and the distinction matters when a customer asks where their package is. The shipment is a FedEx shipment for its whole journey; USPS is a subcontractor for the final delivery. You buy it from FedEx, it moves on FedEx equipment, and FedEx is who you file a claim with. But the person who puts it in the mailbox works for the Postal Service, and USPS delivery rules apply at that point — including Saturday delivery and delivery to PO boxes, which regular FedEx Ground cannot do.
SmartPost vs FedEx Ground#
| FedEx Ground / Home Delivery | SmartPost (Ground Economy) | |
|---|---|---|
| Final mile | FedEx driver | USPS carrier |
| Transit | 1–5 business days, committed | 2–7 business days, not committed |
| Cost | Higher | Lower for light residential parcels |
| PO boxes | Not deliverable | Deliverable |
| Weight sweet spot | Any | Under ~10 lb |
| Account setup | Standard | Must be enabled by FedEx |
Your account has to be enabled first#
SmartPost is not available on a standard FedEx account. Your account must be authorized for it, and FedEx assigns you one or more hub IDs — the sort facility your packages are inducted at — as part of that setup. Until that is done, a SMART_POST rate or label request comes back with an error no amount of parameter fiddling will fix.
Talk to your FedEx account executive. There are volume expectations attached.
Creating a SmartPost shipment#
SmartPost works on both the legacy SOAP carrier (fedex) and the REST carrier (fedex-rest). Three parameters drive it:
| Parameter | What it is |
|---|---|
smart_post_indicia |
The postal class the package moves under. This is what makes it a SmartPost shipment. |
smart_post_hub_id |
The FedEx sort hub the package is inducted at. Assigned to you by FedEx. |
smart_post_endorsement |
What USPS should do if the package is undeliverable. Optional. |
{
"carrier": "FedEx-REST",
"action": "submitshipment",
"params": {
"key": "your-key-from-authenticate-request",
"test": true,
"service": "SMART_POST",
"packaging_type": "YOUR_PACKAGING",
"smart_post_indicia": "PARCEL_SELECT",
"smart_post_hub_id": "5552",
"packages": [
{
"weight": 5
}
],
"shipper": "RocketShipIt",
"ship_addr1": "123 Main St",
"ship_city": "Whitehall",
"ship_state": "MT",
"ship_code": "59759",
"ship_phone": "1231231234",
"to_name": "John Doe",
"to_addr1": "123 Main St",
"to_city": "Beverly Hills",
"to_state": "CA",
"to_code": "90210",
"to_phone": "1231231234"
}
}
Rating and shipping key off different parameters#
This trips people up, so it is worth stating plainly:
- Rating only adds the SmartPost detail to the request when
serviceisSMART_POST. A rate request with an indicia but no service comes back as a plain Ground rate. - Shipping adds the SmartPost detail when
smart_post_indiciais set. A label request withservice: "SMART_POST"but no indicia is not a SmartPost label.
Set both on both calls and neither case can bite you.
Indicia: picking the postal class#
smart_post_indicia is the USPS mail class the package travels under, and it is the parameter that decides what the package is allowed to be. The weight bands are the part that matters:
| Indicia | Use for |
|---|---|
PRESORTED_STANDARD |
Under 1 lb (1–15.99 oz). This is the "SmartPost LightWeight" tier. |
PARCEL_SELECT |
1 lb through 70 lb. The default choice for most parcels. |
MEDIA_MAIL |
Books, film, printed music, sound recordings. USPS content restrictions apply. |
PRESORTED_BOUND_PRINTED_MATTER |
Catalogs, directories and other bound advertising or promotional print. |
PARCEL_RETURN |
Returns moving back to you. See below. |
If a package under a pound is quoting more than you expect, check the indicia: PARCEL_SELECT on a 12 oz package rates as a 1 lb parcel, and PRESORTED_STANDARD is the tier you actually want.
Hub IDs#
smart_post_hub_id names the FedEx sort facility where your packages enter the network. FedEx tells you which one (or ones) your account uses — it is normally the hub nearest the origin you ship from, and shipping to the wrong one is a surcharge, not an error.
Use 5531 (New Berlin) for testing. The full list of hub codes is in the parameters reference, under smart_post_hub_id.
Endorsements: what happens to undeliverable packages#
smart_post_endorsement is the ancillary service endorsement USPS prints on the label. It tells the postal carrier what to do when the package cannot be delivered as addressed:
| Endorsement | Result |
|---|---|
ADDRESS_CORRECTION |
USPS forwards it and bills you for the corrected address. |
CARRIER_LEAVE_IF_NO_RESPONSE |
Carrier leaves the package rather than attempting redelivery. |
CHANGE_SERVICE |
No forwarding, no return; you get the new address or the reason it failed. |
FORWARDING_SERVICE |
USPS forwards it, and returns it if it cannot be forwarded. |
RETURN_SERVICE |
USPS returns it to you without attempting to forward. |
Omitting it is legal and leaves USPS to apply its default handling. For most e-commerce shippers ADDRESS_CORRECTION is the useful one, because a moved customer is worth knowing about.
Tracking a SmartPost package#
A SmartPost package has two identities: the FedEx tracking number you got back on the label, and a USPS barcode for the final-mile leg. Track with the FedEx number — RocketShipIt returns both.
The USPS-side identifier comes back in alternative_tracking_ids on the response, each entry carrying a type that says which network it belongs to:
{
"tracking_number": "61299998820821171811",
"alternative_tracking_ids": [
{
"type": "USPS",
"value": "9261299998820821171811"
}
]
}
It appears in two places: on the label response, per package, as soon as the shipment is created, and on the tracking response once the package is moving. Store it at label time — it is what a customer service agent needs when a customer says "USPS says they have never heard of this number."
Expect a quiet stretch in the middle of the journey. FedEx scans the package at pickup and at each sort, then nothing much happens until it reaches the destination hub and USPS accepts it. That gap is normal and is the single most common "my SmartPost package is lost" support ticket.
SmartPost returns#
PARCEL_RETURN as the indicia creates a return label that travels the other way: the customer drops it in any mailbox or hands it to their letter carrier, USPS collects it, and FedEx moves it back to you. No drop-off trip and no printer required at the customer's end if you mail the label.
See return labels for the general shape of return shipments.
Closing out the day#
SmartPost has its own close process, separate from the FedEx Ground close report. Send createmanifest with smart_post_hub_id set and RocketShipIt runs the SmartPost close instead of the ground close:
{
"carrier": "FedEx",
"action": "createmanifest",
"params": {
"account_number": "YOUR_ACCOUNT_NUMBER",
"meter_number": "YOUR_METER_NUMBER",
"key": "YOUR_KEY",
"password": "YOUR_PASSWORD",
"smart_post_hub_id": "5531",
"carrier_code": "FXSP",
"test": true
}
}
carrier_code says who collects the packages: FXSP for a SmartPost driver, FDXG for a FedEx Ground driver. It defaults to FXSP.
The close is not required for the shipment to be valid — see end-of-day close — but it is worth running for SmartPost, because it makes the packages show as shipped when the driver scans rather than when they reach the hub, which can be a day later.
Examples#
See also UPS Ground Saver, the UPS equivalent, and the full shipping parameter reference.