Push a tracking number from your OMS. Get Plus persists the shipment,
registers it with the carrier, and queues an outbound webhook delivery.
Duplicate-detection: shipments are unique per
(store, tracking_number, order_number). Pushing the same
order_number with the same tracking_number twice is rejected with
409 Conflict and the structured type
https://api.protectplus.io/errors/tracking-number-already-exists.
The existing shipment's identifiers are returned in the existing
problem-details extension so your OMS can recover without an extra
GET. Use PATCH /shipments/{tracking_number} (or
PATCH /shipments/by-id/{id}) to update editable fields on an
existing shipment.
Clubbed orders (one parcel, several orders): different orders
that ship together in one physical parcel may share a single
tracking_number. POST one shipment per order_number, all carrying
the same tracking_number — each becomes its own shipment record and
receives its own tracking updates and notifications. Because a shared
tracking number then maps to several shipments, it can no longer
identify one shipment for a PATCH by tracking number (see
PATCH /shipments/{tracking_number} → 409 and
PATCH /shipments/by-id/{id}).
Carrier token: lowercase letters, digits and underscores, 2–40
characters. The most common values are ups, usps, fedex and
dhl_express. Every accepted token:
| Token | Carrier | Tracking availability |
|---|---|---|
airterra | Airterra | |
apc_postal | APC Postal | |
apg | APG | |
aramex | Aramex | |
asendia_us | Asendia US | |
australia_post | Australia Post (also Startrack) | Account required |
axlehire | Jitsu | Account required |
better_trucks | BetterTrucks | Account required |
borderguru | BorderGuru | |
boxberry | Boxberry | |
bring | Bring (also Posten Norge) | |
canada_post | Canada Post | Get Plus labels only |
chronopost | Chronopost | |
colissimo | Colissimo | Get Plus labels only |
collect_plus | CollectPlus | |
correios_br | Correios Brazil | |
correos_espana | Correos España | Account required |
deutsche_post | Deutsche Post | Get Plus labels only |
dhl_benelux | DHL Benelux | |
dhl_ecommerce | DHL eCommerce | Get Plus labels only |
dhl_express | DHL Express | |
dhl_germany | DHL Germany | Get Plus labels only |
dhl_germany_c2c | DHL Germany C2C | |
dpd_de | DPD Germany | |
dpd_uk | DPD UK | Get Plus labels only |
estafeta | Estafeta | |
fastway_australia | Aramex Australia | |
fedex | FedEx | |
globegistics | Globegistics (now Asendia) | |
gls_us | GLS US | Account required |
gophr | Gophr | Account required |
gso | GSO | Account required |
hermes_germany_b2c | Hermes Germany B2C | |
hermes_uk | Evri UK | Get Plus labels only |
hongkong_post | Hongkong Post | Account required |
lasership | LaserShip | Get Plus labels only |
lso | LSO | Account required |
mondial_relay | Mondial Relay | Account required |
new_zealand_post | New Zealand Post (also Pace, CourierPost) | Get Plus labels only |
nippon_express | Nippon Express | |
ontrac | OnTrac | Get Plus labels only |
parcelforce | Parcelforce | |
passport | Passport | Get Plus labels only |
pcf | PCF | Account required |
poste_italiane | Poste Italiane | Account required |
posti | Posti | |
purolator | Purolator | Account required |
royal_mail | Royal Mail | |
royal_mail_sf | Royal Mail Storefeeder | |
rr_donnelley | ePost Global | |
russian_post | Russian Post | |
skypostal | SkyPostal | |
stuart | Stuart | |
swyft | Swyft | Account required |
uds | UDS (United Delivery Service) | |
ups | UPS | |
usps | USPS | |
veho | Veho |
Tracking availability is blank when the carrier tracks any
tracking number you push. The two exceptions:
- Account required — the carrier only releases tracking to holders of
an account with them. Contact support before pushing these tokens;
shipments are created either way, but no events arrive until the
account is in place. - Get Plus labels only — the carrier only releases tracking for
parcels whose label was bought through Get Plus. Tracking numbers
pushed from your own OMS are accepted and stored, but the timeline
stays empty. Usetracking_urlto link customers to the carrier's
own page for these.
The token is shape-checked rather than restricted to this list, so a
value that is not a real carrier token is still accepted. Where the
tracking number's own format identifies the carrier, Get Plus uses that
and tracking works anyway; otherwise the shipment is saved and the
response is 202, and no tracking events will arrive for it. Check the
token first if a shipment stays silent.
Rate limit: 600 requests per minute per store. This limit is
separate from the global per-IP limit and is not counted against it.
Tracking-only mode
If your OMS doesn't associate shipments with order numbers (e.g. you
track packages independently), omit order_number entirely. Get Plus
will create a standalone shipment record and track it through the
carrier lifecycle without linking it to an order.
Required fields for tracking-only mode: tracking_number, carrier.
All other fields are optional enrichment.
Note: Read endpoints for shipment lists (
GET /shipments,
GET /shipments/:id) are not yet available via the public API. Use
GET /shipments/{tracking_number}to retrieve the tracking timeline
for a specific tracking number.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||