Meta API Live Tracking
Tracking
-
Call Parameters and Body
The Meta API tracking service allows to track parcels in transit or delivered. The data is retrieved from our central servers which are updated constantly. You can extract the status and integrate it for your custom use.
This service is only available to customers who are shipping with DPD. The service allows to track any DPD Parcel which you shipped, not just the ones which have been created with Meta API. So it can be used is a solution for your entire DPD tracking follow-up.
Unfortunately, the Meta API tracking doesn’t provide with all the details as to why a parcel couldn’t be delivered successfully.
Please note that you can also consult the MyDPD4Business tool to get an overview of your shipments.Attention – The Meta API tracking is limited in it’s possible use cases. It is not allowed to use it for data mining and tracking other parcels than your own. Rate limiting applies and you can be blocked from this functionality in case of failure to align with these guidelines. Full details will be provided by the Meta API onboarding team.
For large tracking data consumption, please request Statusdata via EDI. -
Customer Onboarding – Meta API Tracking
Integration with the Meta API Tracking service is fully managed by the Geopost central team.
To ensure a smooth and quick setup, please follow the steps below.Steps to follow
-
Activation request
Send an email to metaapi@geopost.com with the subject:Request – Meta API Tracking account setupPlease include the following details in your message:
-
Customer name (legal entity)
-
Contact email address (for delivery of the API key)
-
Name of IT partner or third-party integrator (if the connection is handled externally)
-
Sample parcel numbers for each account used within the BU
-
Estimated call volumes (relevant for large shippers)
-
-
Validation & configuration
-
The central team will configure access and link all known customer accounts.
-
A dedicated API key will be generated and sent to the provided contact email.
-
For multiple accounts, please provide at least one parcel example per account to ensure proper synchronization.
-
-
Documentation access
-
Swagger UI is available here:
Swagger UI – Tracking
⚠️ Note: an API key must be injected into the HTTP header (e.g. with the ModHeader Chrome plugin)
-
-
Testing & go-live
-
Start with test calls using a limited batch of parcels (max. 100 per request).
-
Once validated, the API can be used in production for all configured accounts.
-
Best practices
-
Refresh frequency: do not refresh the entire parcel base more than once per hour
(e.g. 3,000 active parcels = batch of 100 every 2 minutes). -
Volume considerations: for very large shippers (>100,000 active parcels), please consult Geopost before integration.
-
Account management: always provide new account numbers and parcel samples when requesting additional account linkage.
-
-
LIVE - Sample call & Response
Method:
- POST
URL:
Parameters:
- debug: true
Authorization:
- no auth
Headers
- apiKey: 36 characters (provide your unique Fasttrack API key)
- Content-Type: application/json
Body:
- Object JSON (raw)
Call:
{ "language": "EN", "parcelNumbers": ["05328817355211"] }
Response:[ { "parcelNumber": "05328817355211", "service": { "code": "359", "description": "normal parcel Exapaq" }, "weight": "10", "parcelEvents": [ { "eventDateTime": "2024-02-29 09:49:00+01:00", "country": "FRANCE", "city": "Ajaccio", "statusFamilyLabel": "DELIVERED", "statusLabel": "Delivery - Delivered", "statusId": "DEY", "translation": "Your parcel has been delivered successfully" }, { "eventDateTime": "2024-02-29 09:09:00+01:00", "country": "FRANCE", "city": "Ajaccio", "statusFamilyLabel": "PARCEL OUT FOR DELIVERY", "statusLabel": "Destination depot - Out for delivery", "statusId": "DLO", "translation": "Your parcel is out for delivery" }, { "eventDateTime": "2024-02-29 06:30:00+01:00", "country": "FRANCE", "city": "Ajaccio", "statusFamilyLabel": "AT DELIVERY CENTER", "statusLabel": "Destination depot - Inbound", "statusId": "DLI", "translation": "Your parcel arrived at our delivery depot" }, { "eventDateTime": "2024-02-27 11:03:00+01:00", "country": "FRANCE", "city": "Ajaccio", "statusFamilyLabel": "PARCEL HANDED TO DPD", "statusLabel": "Origin depot - Parcel loaded in the trailer", "statusId": "ORL", "translation": "Your parcel is ready to be transported to our next premises" }, { "eventDateTime": "2024-02-27 10:12:00+01:00", "country": "FRANCE", "city": "Ajaccio", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Labelling process", "statusId": "SPP", "translation": "We have successfully labelled your parcel" }, { "eventDateTime": "2024-02-26 15:24:13+01:00", "country": "FRANCE", "city": "Saint-Rambert d'Albon", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Parcel loaded", "statusId": "HUL", "translation": "Your parcel is ready to leave our hub" }, { "eventDateTime": "2024-02-23 15:52:58+01:00", "country": "FRANCE", "city": "Issy les Moulineaux", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Message Notification - Destination Location: Notification of delivery", "statusId": "MSDLO", "translation": "You received a notification with your delivery details" }, { "eventDateTime": "2024-02-23 15:27:29+01:00", "country": "FRANCE", "city": "Issy les Moulineaux", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Information", "statusId": "SPE", "translation": "Your parcel data was updated and it is on its way" }, { "eventDateTime": "2024-02-23 15:00:00+01:00", "country": null, "city": null, "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Linehaul - Arrival", "statusId": "LHI", "translation": "Your parcel is on its way" }, { "eventDateTime": "2024-02-23 15:00:00+01:00", "country": null, "city": null, "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Linehaul - Start unloading", "statusId": "LHS", "translation": "Your parcel is on its way" }, { "eventDateTime": "2024-02-23 14:42:31+01:00", "country": "FRANCE", "city": "St Geours de Maremne", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Import", "statusId": "HUM", "translation": "We are proceeding to the import process" }, { "eventDateTime": "2024-02-23 14:42:30+01:00", "country": "FRANCE", "city": "St Geours de Maremne", "statusFamilyLabel": "PARCEL HANDED TO DPD", "statusLabel": "Origin depot - Parcel loaded in the trailer", "statusId": "ORL", "translation": "Your parcel is ready to be transported to our next premises" }, { "eventDateTime": "2024-02-23 14:42:29+01:00", "country": "FRANCE", "city": "St Geours de Maremne", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Information", "statusId": "SPE", "translation": "We are collecting the required information about the relabelling of your parcel" }, { "eventDateTime": "2024-02-23 10:40:00+01:00", "country": null, "city": null, "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Linehaul - Departure", "statusId": "LHO", "translation": "Your parcel is on its way" }, { "eventDateTime": "2024-02-23 10:35:56+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Scan", "statusId": "ENZ", "translation": "We are exchanging data internally" }, { "eventDateTime": "2024-02-23 10:35:56+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Information", "statusId": "SPE", "translation": "We are collecting the required information" }, { "eventDateTime": "2024-02-23 10:35:49+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Parcel loaded", "statusId": "HUL", "translation": "Your parcel is ready to leave our hub" }, { "eventDateTime": "2024-02-23 10:05:15+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Parcel loaded", "statusId": "HUL", "translation": "Your parcel is ready to leave our hub" }, { "eventDateTime": "2024-02-23 08:32:29+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Sorted", "statusId": "HUS", "translation": "Your parcel is ready to be transported to our next premises" }, { "eventDateTime": "2024-02-23 08:32:22+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Scan", "statusId": "ENZ", "translation": "We are exchanging data internally" }, { "eventDateTime": "2024-02-23 08:32:22+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Inbound", "statusId": "HUI", "translation": "Your parcel arrived at our hub" }, { "eventDateTime": "2024-02-23 08:26:29+01:00", "country": "SPAIN", "city": "Miranda de Ebro", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Parcel loaded", "statusId": "HUL", "translation": "Your parcel is ready to leave our hub" }, { "eventDateTime": "2024-02-23 03:12:45+01:00", "country": "SPAIN", "city": "Getafe", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Parcel loaded", "statusId": "HUL", "translation": "Your parcel is ready to leave our hub" }, { "eventDateTime": "2024-02-23 01:16:56+01:00", "country": "SPAIN", "city": "El Prat de Llobregat (Barcelona)", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Information", "statusId": "SPE", "translation": "We're sorry but there is a problem with your parcel" }, { "eventDateTime": "2024-02-22 23:27:32+01:00", "country": "SPAIN", "city": "Getafe", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Scan", "statusId": "HUZ", "translation": "Your parcel is at our hub" }, { "eventDateTime": "2024-02-22 11:22:06+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Control", "statusId": "ENV", "translation": "We are exchanging data internally" }, { "eventDateTime": "2024-02-22 11:22:04+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Data received and integrated", "statusId": "ENA", "translation": "We are exchanging data internally" }, { "eventDateTime": "2024-02-22 11:21:57+01:00", "country": "FRANCE", "city": "Issy les Moulineaux", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Information from customer-customer prealert - customer prealertrealert received", "statusId": "CNA", "translation": "We received your parcel data" }, { "eventDateTime": "2024-02-22 11:21:06+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Control", "statusId": "ENV", "translation": "We are proceeding to standard checks" }, { "eventDateTime": "2024-02-22 11:18:29+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "PARCEL HANDED TO DPD", "statusLabel": "Origin depot - Inbound", "statusId": "ORI", "translation": "Your parcel arrived at our depot" }, { "eventDateTime": "2024-02-22 11:18:29+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "PARCEL HANDED TO DPD", "statusLabel": "Origin depot - Sorted", "statusId": "ORS", "translation": "Your parcel is ready to be transported to our next premises" }, { "eventDateTime": "2024-02-22 11:18:29+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Scan", "statusId": "SPZ", "translation": "Your parcel is on our premises" }, { "eventDateTime": "2024-02-21 18:40:22+01:00", "country": "SPAIN", "city": "Segovia", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Scan", "statusId": "ENZ", "translation": "We are exchanging data internally" } ], "error": null } ]
-
STAGE - Sample call & Response
Method:
- POST
URL:
(stage)
Parameters:
- debug true
Authorization:
- no auth
Headers
- apiKey Fasttrack API Key
- Content-Type application/json
Body:
- Object JSON (raw)
{ "language": "EN", "parcelNumberAndReceiverZipcodeList": [ { "parcelNumber": "05328817355211", "receiverZipcode": "1160" } ] }
Body:[ { "parcelNumber": "05328817355211", "service": { "code": "327", "description": "normal parcel, B2C" }, "weight": "68300", "parcelEvents": [ { "eventDateTime": "2022-02-08", "country": "BELGIUM", "statusFamilyLabel": "PARCEL OUT FOR DELIVERY", "statusLabel": "Destination depot - Out for delivery", "statusId": "DLO", "translation": "Your parcel is on its way" }, { "eventDateTime": "2022-02-08", "country": "BELGIUM", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Message Notification - Destination Location: Notification of delivery", "statusId": "MSDLO", "translation": "We informed you that your parcel will be delivered on " }, { "eventDateTime": "2022-02-08", "country": "BELGIUM", "statusFamilyLabel": "AT DELIVERY CENTER", "statusLabel": "Destination depot - Inbound", "statusId": "DLI", "translation": "Your parcel arrived at our delivery depot" }, { "eventDateTime": "2022-02-07", "country": "BELGIUM", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Status parcel - Loaded", "statusId": "SPL", "translation": "Your parcel is on its way" }, { "eventDateTime": "2022-02-07", "country": "BELGIUM", "statusFamilyLabel": "IN TRANSIT", "statusLabel": "Hub or other premises - Sorted", "statusId": "HUS", "translation": "Your parcel was sorted for transport to our next premises" }, { "eventDateTime": "2022-02-07", "country": "BELGIUM", "statusFamilyLabel": "PARCEL HANDED TO DPD", "statusLabel": "Origin depot - Inbound", "statusId": "ORI", "translation": "Your parcel entered our network" }, { "eventDateTime": "2022-02-04", "country": "GERMANY", "statusFamilyLabel": "NEUTRAL", "statusLabel": "Data exchange - Data received and integrated", "statusId": "ENA", "translation": "We have successfully integrated your data" } ] } ] -
Tracking Push (New)
The Tracking Push service allows customers to receive parcel tracking events automatically through a webhook endpoint.
Instead of periodically querying the Tracking API, Meta API sends each new tracking event directly to a customer-hosted HTTPS endpoint as soon as it becomes available.Note: Tracking Push is an optional feature that complements the Tracking API.
Customers can use polling, push notifications, or both depending on their integration requirements.How it works
- The customer exposes a public HTTPS endpoint.
- Meta API sends a POST request whenever a new tracking event is generated.
- The customer validates the request and processes the event.
- A successful HTTP 200 response acknowledges reception.
Prerequisites
To enable Tracking Push, customers must provide:
Item Description Preproduction endpoint Public HTTPS URL used for integration testing. Production endpoint Public HTTPS URL used in live environment. Authentication method API Key or HMAC-SHA256 signature validation. Technical contact Optional contact used during onboarding and testing. Authentication
Static API Key
Meta API sends an
X-API-KEYheader with every request.
The receiving system must validate the header value before processing the event.HMAC-SHA256 Signature
For enhanced security, Meta API can sign each request using a shared secret.
Header Description X-SIGNATURE Generated HMAC-SHA256 signature. X-TIMESTAMP Unix timestamp used during signature generation. signature = HMAC_SHA256( X-TIMESTAMP + "." + requestBody, sharedSecret )The timestamp must be within ±60 seconds of the receiving server time.
Webhook Request
Property Value Method POST Content-Type application/json Payload Example
{ "parcelNumber": "15501234567890", "service": { "code": "101" }, "weightAndDimension": { "weight": "3000", "length": 20, "width": 15, "height": 10 }, "event": { "eventDateTime": "2025-06-12T08:30:00Z", "country": "BE", "city": "Brussels", "statusId": "DEY", "translation": "Delivered" } }Response Codes
HTTP Code Description 200 Event successfully received and processed. 401 Authentication failed. 400 Invalid payload. 500 Temporary processing error. Best Practices
- Expose only HTTPS endpoints.
- Validate authentication headers before processing events.
- Return HTTP 200 only after successful processing.
- Design the endpoint to be idempotent to safely handle duplicate deliveries.
- Log incoming requests for troubleshooting and audit purposes.
Need more details?
This page provides a high-level overview of the Tracking Push service. For the complete technical specification, including authentication mechanisms, payload structure, retry behaviour, sample requests, downtime handling, and integration steps, please download the MetaAPI Tracking Push Customer Integration GuideIf you would like to activate the Tracking Push service, please share your callback endpoints and preferred authentication method with the MetaAPI team.
Technical support:
metaapi@geopost.com -
Meaning and mapping the statusID field
As you can see in the responses, each status has fields that are self-explanatory, except the statusId field. This field is the Geopost Group code for the status and some customers might want to use that value to know the status of their shipping.
The full list of all the StatusID’s an be downloaded here. Customers are free to use it and map the codes in their own systems as they see fit. The Geopost-related columns in the list are the ones marked in blue (col A to J)