Carrier’s official API
Maersk Delivers (formerly Pilot Freight Services) API: integration guide
Pilot Freight Services was acquired by Maersk in 2022 and now operates as Maersk Delivers. Because of that, customers deal with two parallel APIs: the legacy Pilot API (REST rating and shipments with an api-key header, plus a separate SOAP tracking service) and the newer Maersk Delivers gateway (OAuth 2.0, shipment creation, cancellation and webhooks). This guide covers both and is aimed at shippers, 3PLs and TMS vendors moving big and bulky freight, home delivery and white-glove shipments.
This guide covers Maersk Delivers (formerly Pilot Freight Services)’s own API (api.maersk.com). Credentials come from Maersk Delivers (formerly Pilot Freight Services), not from FreightAPIs, and we are not affiliated with them.
Want one API key for carrier terminals, NMFC and ports instead? FreightAPIs API docs →
At a glance
| Carrier | Maersk Delivers (formerly Pilot Freight Services) (A.P. Moller - Maersk) |
|---|---|
| Type | Big & bulky final-mile and white-glove carrier |
| Interface | REST/JSON (legacy Pilot API), SOAP/XML (legacy Pilot tracking), REST/JSON (Maersk Delivers gateway), Webhooks (JSON push) |
| Authentication | Legacy: static API key header (REST) and user ID/password in the SOAP body. Maersk gateway: OAuth 2.0 client credentials. |
| Capabilities | Rate quote (legacy Pilot API), Shipment creation and void (legacy Pilot API), Shipment tracking (legacy Pilot SOAP service), Shipment creation and cancellation (Maersk Delivers gateway), Service code lookup (Maersk Delivers gateway), Status and POD webhooks (Maersk Delivers gateway) |
Getting access
- Both platforms are for existing customers. You need a Pilot / Maersk Delivers account, which in their systems is identified by a CoPilot location ID plus one or more configured tariffs.
- Credentials are issued per platform: an API key for the legacy Pilot REST API, a separate user ID and password for the legacy SOAP tracking service, and an OAuth client ID and secret for the Maersk Delivers gateway. Request them through your Pilot / Maersk account manager.
- Legacy Pilot API reference material is provided as a Swagger page; the Maersk Delivers gateway is described on the Maersk Delivers developer portal. Detailed field-level documentation is generally provided to customers on request.
- Neither platform documents pricing for API use, rate limits or a self-service signup flow.
Authentication
Legacy: static API key header (REST) and user ID/password in the SOAP body. Maersk gateway: OAuth 2.0 client credentials..
- Legacy Pilot REST API: send the header api-key with your key and Content-Type: application/json on every request. No token exchange.
- Legacy Pilot SOAP tracking: no API key. The user ID and password go inside the XML body as sUserID and sPassword. Requests are POSTed as text/xml with a SOAPAction header of the form http://tempuri.org/{OperationName}.
- Maersk Delivers gateway: POST client_id, client_secret and grant_type=client_credentials (form-encoded) to the token endpoint /customer-identity/oauth/v2/access_token on api.maersk.com, with a Consumer-Key header set to your client ID.
- The token response contains access_token, token_type (Bearer) and expires_in in seconds (3600 in the documented example). Refresh before it expires.
- Every gateway call then carries Authorization: Bearer <token> and Consumer-Key: <client ID>. An optional Api-Version header pins a version; without it you get the latest stable one.
- Webhooks from the gateway are signed: Maersk computes an HMAC-SHA256 of the raw body with the secret token you registered and sends it in X-Maersk-Signature-256.
Environments
| Maersk Delivers gateway — production | https://api.maersk.com/mgf/public-gateway |
|---|
Endpoints
Rate quote (legacy Pilot API)
Quote an LTL / home-delivery shipment either across every service level your tariff offers or for one service code. Quotes can be saved and fetched later by ID. The Maersk gateway does not document a rating endpoint, so quoting still runs on the legacy API.
| POST | /v1/Ratings | Rate a shipment for all available service levels in one response. |
| POST | /v1/Ratings/{code} | Rate a shipment for a single service code. |
| GET | /v1/Ratings/{id} | Retrieve a previously saved quote by its ID. |
Shipment creation and void (legacy Pilot API)
The legacy REST API also accepts new shipments and voids them by PRO number. A void only reliably succeeds before the freight has been dispatched for pickup.
| POST | /v1/Shipments | Create a shipment on the legacy platform. |
| POST | /v1/Shipments/Void/{pronumber} | Void a shipment by PRO number (takes a VoidedShipment object in the body). |
Shipment tracking (legacy Pilot SOAP service)
Tracking is a separate SOAP/XML service rather than part of the REST API. You can track by PRO number or by your own reference number, singly or in a batch, and the HD variants add home-delivery appointment windows.
| SOAP | HelloWorld | Connectivity check. |
| SOAP | PilotAPITracking | Basic tracking by PRO number. |
| SOAP | PilotAPIDetailTracking | Detailed event history by PRO number. |
| SOAP | PilotAPIDetailTrackingHD | Detailed history by PRO number plus home-delivery appointment fields. |
| SOAP | PilotAPIMultiDetailTrackingHD | Detailed tracking with HD fields for several reference numbers at once. |
| SOAP | PilotAPIReferenceTracking | Basic tracking by customer reference number. |
| SOAP | PilotAPIReferenceDetailTrackingHD | Detailed tracking with HD fields by customer reference number. |
Shipment creation and cancellation (Maersk Delivers gateway)
Create shipments with a JSON body keyed on your CoPilot location ID and a service code, and cancel them by housebill. The response returns the housebill (the tracking number), estimated delivery and the rated charges.
| POST | /shipments | Create a shipment and get back its housebill and rate. |
| DELETE | /shipments/{housebill} | Request cancellation (void) of a shipment. |
Service code lookup (Maersk Delivers gateway)
List the service codes your account, or a specific tariff on it, can book. Use this before setting serviceCode on a shipment.
| GET | /locations/{locationId}/service-codes | List service codes available to a location. |
| GET | /locations/{locationId}/tariffs/{tariffCode}/service-codes | List service codes under one tariff. |
Status and POD webhooks (Maersk Delivers gateway)
Neither platform has a POD or invoice download endpoint. On the Maersk side, status changes and uploaded documents (including delivery receipts and photo POD) are pushed to a webhook URL you register in CoPilot.
| POST | Webhook event: shipment.status | Pushed when a shipment status changes; DEL events include podSignature and podDateTime. |
| POST | Webhook event: shipment.documents | Pushed when a document is uploaded; includes a short-lived retrievalUrl for the file. |
Example request
The response returns the housebill, which is the number you track (as the PRO number on the legacy SOAP service) and cancel with.
Integration notes
- The two platforms name the same things differently. Legacy Pilot uses Zipcode / State / Country and ProNumber; the Maersk gateway uses postalCode / regionCode / countryCode and housebill. Map them explicitly if you use both.
- Legacy Pilot request bodies send numbers as strings ("500", "Y"/"N" flags), while the gateway expects real numbers plus explicit weightUnit and dimensionalUnit.
- Rating is only available on the legacy API. A common pattern is to quote there, pass the QuoteID as quoteId when creating the shipment on the gateway, and keep two sets of credentials.
- Dimensional weight drives price. The rating examples bill the larger of actual and dim weight (dims in inches, divided by 250), so always send real dimensions.
- One rating response returns every service level at once, and Breakdown[] is a flat list across all of them. Group the lines by Quote_Id to rebuild each quote; a cheap base rate (for example Economy) can end up more expensive once residential and liftgate charges are added.
- DELETE /shipments/{housebill} returning 200 does not mean the shipment is cancelled. Once it is dispatched for pickup, picked up, out for delivery, delivered, or within 2 hours of its appointment, the request is passed to the station for manual review. Confirm via tracking or webhooks.
- Webhook retrievalUrl links for POD and other documents are short-lived. Download and store the file as soon as the shipment.documents event arrives. Failed deliveries are retried up to 5 times, 5 minutes apart.
- In SOAP tracking, an appointment that is not yet scheduled comes back as 0001-01-01T00:00:00+00:00. Terminal event codes are DEL, DAM, RFS and XXX (cancelled).
FAQ
Does Pilot Freight Services still have an API after the Maersk acquisition?
Yes. The legacy Pilot API (REST rating and shipments plus SOAP tracking) still runs alongside the newer Maersk Delivers gateway. Rating and pull-based tracking are on the legacy side; the gateway handles shipment creation, cancellation and webhooks.
How do I authenticate with the Maersk Delivers API?
Use OAuth 2.0 client credentials: exchange your client ID and secret for a bearer token, then send Authorization: Bearer plus a Consumer-Key header on every call. The legacy Pilot REST API uses a static api-key header instead.
Can I track a Pilot / Maersk Delivers shipment by PRO number via API?
Yes, through the legacy SOAP tracking service. PilotAPIDetailTrackingHD takes the PRO number (the housebill), and the Reference variants take your own reference number. On the gateway, status updates arrive by webhook instead.
Is there a POD or invoice API?
There is no endpoint to pull POD or invoices on either platform. POD documents and delivery signatures are pushed by Maersk Delivers webhooks (shipment.documents and shipment.status), and no invoice API is documented.
How do I get API credentials?
Ask your Pilot / Maersk Delivers account manager. Credentials are issued separately for each platform, and both need an existing account with a CoPilot location ID and configured tariffs.
On FreightAPIs
Official resources
- Maersk Delivers developer portal: delivers.maersk.com/developer/
- Maersk Delivers Shipments API: delivers.maersk.com/developer/apis/shipments/
- Maersk Delivers Webhooks: delivers.maersk.com/developer/apis/webhook/
Written from Maersk Delivers (formerly Pilot Freight Services)’s published API documentation and last checked 2026-10-09. FreightAPIs is not affiliated with Maersk Delivers (formerly Pilot Freight Services); endpoints and access rules can change, so confirm details in the carrier’s own documentation before going live.
Other carrier API guides
ABF Freight · Estes Express Lines · Saia LTL Freight · TForce Freight · Old Dominion Freight Line · XPO (LTL) · AAA Cooper Transportation · AIT Worldwide Logistics