Complete reference for integrating with our multi-carrier shipping platform
Get up and running
Include your AUTH_USER and AUTH_PW to authenticate.
Verify your credentials
Start processing shipments
// First, authenticate your credentials
curl --location 'https://api.xenor.tech/auth' \
--header 'AUTH_USER=YOUR_AUTH_USER' \
--header 'AUTH_PW=YOUR_AUTH_PW'
Complete reference
/authAUTH_USERAUTH_PWauthentication_status, permissions, rate_limits
curl --location 'https://api.xenor.tech/auth' \
--header 'AUTH_USER=YOUR_AUTH_USER' \
--header 'AUTH_PW=YOUR_AUTH_PW'/get_tracking_information/APIKEY/tracking_codeAPIKEYtracking_codeflight_tracking_settinglangtypetracking_detailslangDefault: enSets the language for the API response
Values: en, nl
flight_tracking_settingDefault: excludeDefines how flight/waybill tracking should be handled
Values: only, include, exclude
typeDefault: barcodeSpecifies the type of tracking being used
Values: barcode, waybill, box
tracking_detailsDefault: fullDefines the level of detail in the tracking response
Values: minimal, lastStatus, full
tracking_events, current_status, estimated_delivery, carrier_info, flight_tracking
# Single tracking
curl --location 'https://api.xenor.tech/get_tracking_information/APIKEY/tracking_code?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=full' \
--data ''
# Bulk tracking
curl --location --request GET 'https://api.xenor.tech/get_tracking_information/APIKEY/tracking_code?flight_tracking_setting=include&lang=en&type=barcode&tracking_details=full' \
--data '[
"123456789",
"987654321",
"123498765",
"567894321"
]'/action/APIKEY/101/created_bycarriercarrier_optionweightdimensionsrecipient_infosender_infoplDefault: NY = Show PDF label, N = get JSON result
Values: Y, N
dhlzplDefault: NY = get DHL JSON Label, N = get URL to get PDF
Values: Y, N
zplDefault: NY = get ZPL label if carrier supports it
Values: Y, N
oDefault: Output will be in JSON format
Values: JSON
dlDefault: NY = the label will be called within this call
Values: Y, N
label_url, tracking_number, shipment_id, processing_status
curl --location 'https://api.xenor.tech/action/APIKEY/101/?pl=Y&zpl=N&o=JSON' \
--header 'Content-Type: application/json' \
--data '{
"created_by": "API_USER",
"standard_email_to_sender": "sender@example.com",
"standard_email_to_receiver": "receiver@example.com",
"print_phone_number": "+31612345678",
"carrier": 9999,
"carrier_option": 0,
"signature_required": false,
"number_of_packages": 1,
"weight": 0.12,
"value": 22.99,
"length": 1.0,
"width": 2.0,
"height": 3.0,
"is_company": false,
"company_name": "",
"department": "",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@email.com",
"content": "Electronics",
"content_on_label": "",
"street": "Test Street",
"street2": "",
"house_number": "123",
"postal_code": "1012AB",
"city": "Amsterdam",
"country": "Netherlands",
"phone_number": "+31612345678",
"reference": "ORDER-001",
"reference2": "",
"vat_number": "",
"return_label": false
}'/post_manifest_data/APIKEYwaybillpackageIdparcelIdrecipient_infosender_infoitem_detailsls (optional)lsDefault: NY = Lock manifest data (if there are no errors), N = Don't lock manifest data. ONLY APPLICABLE FOR AIRWAYBILLS
Values: Y, N
upload_status, validation_errors, manifest_id
curl --location 'https://api.xenor.tech/post_manifest_data/APIKEY?ls=Y' \
--header 'Content-Type: application/json' \
--data '[ ... ]'/lock_shipment/APIKEYwaybillAPIKEYlock_status, confirmation_message
curl --location 'https://api.xenor.tech/lock_shipment/APIKEY' \
--header 'Content-Type: application/json' \
--data '{"waybill":"999-12345678"}'Complete reference
97Manifested for customs98Label data has been pre-registered99Label has been created200Dispatch declaration201Dispatch arrival202Dispatch documentation203Dispatch amendment204Dispatch cancellation205Customs clearance started207Customs Issue208Confiscated209Held by customs210Needs documents211Accepted213Parcel cleared214Cleared manually215Cancelled216Arrived in facility217Ready for last mile218Released to last mile219Job dispatched2000The cargo is being tracked2001Information has been sent, waiting for the logistics provider to pick up the cargo2002The logistics provider gets the cargo2003In transit2004The cargo arrived at their destination2005Notify the consignee to pick up the cargo2006The cargo is delivered to the consignee2007Packages were lost, damaged, returned, unclaimed, etc2008Shipping time too long3000Parcel has reached a depot3001Outbound scan3004Parcel details updated3005Parcel has arrived at the last-mile carrier3050Parcel has left the depot5000Parcel is out for delivery5001Parcel is out for delivery to recipient5002A text message notification has been sent to the recipient5003Parcel is out for delivery to parcel locker5004Parcel is out for delivery to parcel shop7000Recipient was not at home, second try:7001Recipient was not at home, package will be stored on the depot for 5 days7002Recipient was not at home7003Recipient was not at home, package can be picked up at a collection point7004Stored until requested8000Return to sender8001Shipment canceled8500Extra information9000Delivered9001Package is delivered to the neighbors9002Package is delivered to the parcelshop9003Package is delivered to the parcelbox9004Package is delivered to a secure place9005Package is collected9006Return delivered9500Refused9501Package was not picked up9502Package was not delivered9503Package is rerouted to a new address9600Incorrect address detailsSecure your API
# Authentication endpoint
curl --location 'https://api.xenor.tech/auth' \
--header 'AUTH_USER=YOUR_AUTH_USER' \
--header 'AUTH_PW=YOUR_AUTH_PW'
# Other endpoints use API key in URL path
curl --location 'https://api.xenor.tech/post_manifest_data/YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[{"waybill": "999-12345678", ...}]'Security Note: Keep your credentials secure. Never expose them. Use environment variables.