Take the complexity out of logistics with Eurosender’s multi-carrier shipping API. Connect to a global network of trusted carriers and access over 150 million pre-negotiated rates—all through one simple integration.
Automate your shipping workflows, reduce costs, and scale your operations as your business grows. From real-time tracking to faster deliveries and better customer experience, the API gives you the tools to move smarter and faster—without the overhead.
https://sandbox-api.eurosender.com/
https://api.eurosender.com/
The Quote endpoint allows you to obtain accurate and up-to-date pricing for your desired shipment based on package details, service types, and other criteria. By providing comprehensive shipment information, you can receive tailored quotes reflecting available shipping options, estimated costs, and any applicable fees. This powerful feature enables businesses to compare different shipping methods, optimize cost-efficiency, and provide transparent pricing to end users — all through seamless API integration. Whether you’re shipping parcels, pallets, or freight, the Quote endpoint delivers fast, reliable data essential for making informed logistics decisions.
Key benefits include:
Use this endpoint to streamline your shipping process and empower your customers with immediate, transparent shipping quotes.
The Quote endpoint allows you to obtain real-time shipping rates based on your specified shipment details—such as parcel dimensions, weight, service type, and pickup/delivery locations. This ensures you can present precise, up-to-date pricing options to your customers or internal systems before creating an order.
Key features:
The new QuoteRequest resource
Shipment details (where and when to ship)
City name, belonging to ZIP code. For cases where providing exact city name is mandatory (like Ireland or Romania), it can be retrieved from endpoint /v1/countries/{countryCode}/cities
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If cityId
is provided, this field can be empty.
ID of the City for cases where providing exact city is mandatory (like Ireland or Romania), it can be retrieved from endpoint /v1/countries/{countryCode}/cities
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If exact city name is provided in field city
, this field can be empty. Example value: 1341
for Dublin
in region County Dublin
in Ireland
Street name with house number
Region name. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If regionCode
or regionId
is provided, this field can be empty. Example value: County Dublin
in Ireland
Region code. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If region
or regionId
is provided, this field can be empty. This field is supported only for some countries (Italy, USA, Canada). Example value: AC
for region Ancona
in Italy
Region ID. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If region
or regionCode
is provided, this field can be empty. Example value: 6
for region County Dublin
in Ireland
Additional address fields that can be provided for some countries, like doorbell
for Germany. Availability of the fields and flag if optional or required can be retrieved from endpoint /v1/countries
.
City name, belonging to ZIP code. For cases where providing exact city name is mandatory (like Ireland or Romania), it can be retrieved from endpoint /v1/countries/{countryCode}/cities
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If cityId
is provided, this field can be empty.
ID of the City for cases where providing exact city is mandatory (like Ireland or Romania), it can be retrieved from endpoint /v1/countries/{countryCode}/cities
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If exact city name is provided in field city
, this field can be empty. Example value: 1341
for Dublin
in region County Dublin
in Ireland
Street name with house number
Region name. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If regionCode
or regionId
is provided, this field can be empty. Example value: County Dublin
in Ireland
Region code. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If region
or regionId
is provided, this field can be empty. This field is supported only for some countries (Italy, USA, Canada). Example value: AC
for region Ancona
in Italy
Region ID. For cases where providing region (name, code or ID) is mandatory, like Ireland, Romania, Italy, USA, Canada, it can be retrieved from endpoint /v1/countries/{countryCode}/regions
. This condition depends on Country, flag for this is available at endpoint /v1/countries
. If region
or regionCode
is provided, this field can be empty. Example value: 6
for region County Dublin
in Ireland
Additional address fields that can be provided for some countries, like doorbell
for Germany. Availability of the fields and flag if optional or required can be retrieved from endpoint /v1/countries
.
Pickup date, can be empty to retrieve first possible date (minPickupDate
). Time part is ignored. Value must be in RFC3339 format (for example 2023-04-04T00:00:00Z
)
Specifies if new pickup needs to be scheduled (new_pickup_request
), or there is already pre-arranged regular pickup scheduled (scheduled_pickup
), or there is no need for pickup because the shipment will be dropped off at a courier location (drop_off
).
Not supported (ignored) on some couriers.
Pickup request with desires pickup time frame will be called independently (in 30 minutes) by using Pickup
endpoint.
Pickup contact, not needed for Quote
, but required for Order
.
Pickup contact, not needed for Quote
, but required for Order
.
Delivery contact, not needed for Quote
, but required for Order
.
Delivery contact, not needed for Quote
, but required for Order
.
Parcels details (what to ship)
LTL: Less than truckload
Only one allowed per shipment, can't be mixed with FTL
Can be used only with serviceType ftl
Payment method, where credit
is for User credits (pre-paid, Wallet) and deferred
must be additionally approved to be enabled for use. Other payment methods are not supported.
Service type to use. More on service types
For internal use only.
Additional insurance ID, applicable for selected service type, one of the values from Quote response under options.serviceTypes[].insurances[]
https://sandbox-api.eurosender.com/v1/quotes
https://api.eurosender.com/v1/quotes
curl -i -X POST \
https://sandbox-api.eurosender.com/v1/quotes \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"shipment": {
"pickupAddress": {
"country": "LU",
"zip": "1911",
"city": "Luxembourg",
"cityId": null,
"street": "9 Rue du Laboratoire",
"additionalInfo": null,
"region": null,
"regionCode": null,
"regionId": null,
"timeZoneName": null,
"customFields": [],
"pudoPointCode": null,
"customerPudoNumber": null
},
"deliveryAddress": {
"country": "LU",
"zip": "1911",
"city": "Luxembourg",
"cityId": null,
"street": "9 Rue du Laboratoire",
"additionalInfo": null,
"region": null,
"regionCode": null,
"regionId": null,
"timeZoneName": null,
"customFields": [],
"pudoPointCode": null,
"customerPudoNumber": null
},
"pickupDate": "2023-04-04T00:00:00Z",
"pickupType": "new_pickup_request",
"independentPickup": false,
"pickupContact": {
"name": "Eurosender SARL",
"email": "name@example.com",
"phone": "+442031292884"
},
"deliveryContact": {
"name": "Eurosender SARL",
"email": "name@example.com",
"phone": "+442031292884"
},
"addOns": "flexibleChanges"
},
"parcels": {
"envelopes": [],
"packages": [
{
"parcelId": "A00001",
"quantity": 1,
"width": 14,
"height": 14,
"length": 15,
"weight": 2,
"content": "books",
"value": 150
}
],
"pallets": [
{
"parcelId": "B00001",
"quantity": 1,
"width": 80,
"height": 100,
"length": 120,
"weight": 50,
"content": "tires",
"value": 500,
"isStackable": true
}
],
"vans": [
{
"parcelId": "A00001",
"vanType": "small_van",
"optionalServices": [
"help_loading"
]
}
],
"ltls": [
{
"parcelId": "T00001",
"euroPalletQuantity": 12,
"loadingMeters": null,
"weight": 3600,
"notes": "12x 120x80x220cm, 300kg/pallet, total weight: 3.600kg, not-stackable, boxes with a spare parts packed on pallets"
}
],
"ftls": [
{
"parcelId": "T00001"
}
]
},
"paymentMethod": "credit",
"currencyCode": "EUR",
"serviceType": "selection",
"serviceSubtype": "door_to_door",
"courierTag": null,
"preferredCouriersOnly": false,
"courierId": null,
"insuranceId": null,
"labelFormat": null
}'
{ "options": { "serviceTypes": [ … ], "parcelLevelOptionalServices": [ … ], "generalTermsAndConditionsLink": null, "paymentMethods": [ … ] }, "order": { "totalPrice": { … }, "insuranceId": null, "parcels": [ … ], "paymentDiscount": { … }, "addOns": "flexibleChanges", "serviceType": "string", "serviceSubtype": "string", "minPickupDate": "2019-08-24T14:15:22Z", "estimatedDeliveryTime": "string", "courierId": null, "courierTag": null, "calculatedDistance": 0 }, "warnings": [ { … } ] }
The Order section of the Eurosender API offers a full set of endpoints to manage every step of the shipping lifecycle. From orders creation and rder validating orders, scheduling pickups, accessing shipping documents, and tracking deliveries—this section provides the tools needed to integrate smooth, automated logistics operations into your system.
Key capabilities include:
By leveraging these endpoints, businesses can automate workflows, reduce manual errors, and ensure efficient, reliable delivery service for their customers.
The Proforma endpoints enable you to handle all necessary customs documentation required for shipments involving exports or imports. When an order status indicates Awaiting customs documentation
, you can use these endpoints to create and upload proforma invoices, ensuring smooth customs clearance and uninterrupted shipment processing.
This functionality is critical for compliance with international shipping regulations and helps avoid delays at customs by providing accurate and timely documentation. You can create proforma documents via the API, submit the required data, and upload PDF invoices encoded in base64 format when necessary.
Key features include:
Integrating proforma management into your system guarantees a seamless customs clearance experience, saving time and reducing administrative overhead.
The Country endpoints deliver comprehensive geographic data necessary for precise and compliant shipment handling with the Eurosender API. These endpoints return lists of supported countries, cities, and regions used to define shipment origins and destinations.
Certain countries—such as Ireland, Romania, Italy, the USA, and Canada—require specifying the region (by ID, name, or code) when placing orders. For some of these countries, providing the exact city name or city ID is also mandatory. These requirements are flagged within the country data payload to guide proper order submission.
The response also includes associated region IDs accessible via the /v1/countries/{countryCode}/regions
endpoint, allowing for structured regional selection.
Using these endpoints helps ensure your system validates location data accurately, prevents order errors, and complies with local shipping regulations.
The Pickup endpoints enable precise management of shipment pickups within the Eurosender API ecosystem. These endpoints support:
independentPickup: true
, allowing users to control pickup scheduling manually.options.serviceTypes.pickupTimeFrameSelectionPossible
set to true
in the quote response.This functionality ensures your shipments are collected efficiently, providing flexibility to tailor pickup timings while automating routine scheduling. Proper use of these endpoints helps streamline logistics operations and improve delivery reliability.
This endpoint retrieves a list of available Pick-Up Drop-Off (PUDO) points based on the shipment criteria provided. It is designed for service types that involve delivery to or from a designated pick-up location, including:
door_to_shop
: home collection to a PUDO pointshop_to_door
: PUDO drop-off to a home deliveryshop_to_shop
: PUDO drop-off to another PUDO locationUse this endpoint to present users with a selection of eligible PUDO points near the sender's or recipient’s address, enabling flexible and convenient shipping arrangements.
You can subscribe to a set of events sent by our webhooks. Log in to your Eurosender business account. Navigate to User dashboard → New order → Public API tab. Here you can enable webhooks and see their status. Supported webhooks:
order_label_ready
Trigger: When label(s) for an order become available (only for orders that require label printing).order_submitted_to_courier
Trigger: When shipping is booked in the courier's system.order_tracking_ready
Trigger: When tracking codes become available for the order, but only if they weren't already available when submitted.order_cancelled
Trigger: When (or if) an order is cancelled.delivery_status_updated
Trigger: When a new delivery status event is dispatched.Webhooks 1–4 send data in the request headers using the pattern below:
Headers:
Webhook-Id: unique_id_for_each_webhook_sent
Webhook-Event: code
Webhook-Signature:...
Body:
{ 'triggerId': id, 'orderCode': '123456-12', 'courierId': 23, # only for webhhok 2 'trackingCodes': [ # only for webhooks 2, 3 { 'orderCode': '123456-12', 'trackingNumber': '11111111', 'trackingUrl': 'https://demo.com/?track=1111111' } ] }
Webhook Delivery status sends data in request header as per pattern below (same payload as GET /v1/orders/{orderCode}/tracking
endpoint).
Example:
{ 'notifications': [ { 'trackingDetails': { 'parcels': [ { 'parcelId': 'ebbfce6a-000e-00b4-99aa-004dc9b3ee9a', 'orderCode': '011231-24', 'trackingNumber': '10000010007', 'currentStatus': 'InfoReceived', 'currentSubstatus': 'InfoReceived_001', 'updatedDate': '2024-06-11T09:55:47+02:00', 'expectedDeliveryDate': null, 'pickupDate': '2024-06-10T14:34:31+02:00', 'deliveryDate': null, 'signedBy': null, 'checkpoints': [ { 'eventDate': '2024-06-10T14:34:31+02:00', 'status': 'InTransit', 'substatus': 'InTransit_001', 'location': null, 'countryCode': null, 'message': 'Data sent' }, { 'eventDate': '2024-06-11T11:18:24+02:00', 'status': 'InfoReceived', 'substatus': 'InfoReceived_001', 'location': 'LJUBLJANA', 'countryCode': null, 'message': 'P&S/P&R picked up' } ] } ] }, 'orderCode': '736361-24', 'triggerId': 5 } ] }