Shipping API Documentation
A clear, practical reference for requesting rates, creating shipping labels and tracking shipments with Easy Express.
Overview
Integrate shipping rates, label creation and shipment tracking into your application through Easy Express API v3.
1. Request rates → 2. Select carriers[].id → 3. Create shipment → 4. Retrieve labels and tracking numbers.
Authentication
Send your API token in the Authorization header on every request. The Postman collection uses host and variable_token variables.
{
"Authorization": "Bearer {{variable_token}}",
"Content-Type": "application/json"
}Import the downloadable collection, set host to https://easy-express.fr, and set variable_token to your own API token. Do not expose tokens in frontend code.
Get shipping rates
Get available shipping services and price estimates using origin, destination and parcel weight.
/api/v3/shipments/ratesRequest example
{
"senderAddress": {
"countryCode": "FR",
"postalCode": "93300"
},
"receiverAddress": {
"countryCode": "FR",
"postalCode": "75002"
},
"parcels": [
{
"weight": 1
}
]
}Response example
{
"Response": {
"Date": 1765451621,
"Status": "SUCCEEDED",
"Code": 200,
"Message": {
"transactionId": "EXAMPLE_TRANSACTION_ID",
"shipmentRequest": {
"senderAddress": {
"countryCode": "FR",
"postalCode": "93300"
},
"receiverAddress": {
"countryCode": "FR",
"postalCode": "75002"
},
"parcels": [
{
"weight": 1
}
]
},
"carriers": [
{
"id": "EXAMPLE_CARRIER_ID",
"code": "fedex",
"name": "FedEx",
"price": 2107,
"priceIncTax": 2528,
"logo": "https://easy-express.fr/media/logo/sq/fedex.png",
"infos": {
"estimatedArrival": "3-4 day(s)",
"maximumSizeSupported": "Max 80*50*30cm, 25kg"
}
}
]
}
}
}price: 2107 corresponds to €21.07 excluding tax; priceIncTax: 2528 corresponds to €25.28 including tax. Currency interpretation follows the account/quotation context.Response fields
| Field | Type | Description |
|---|---|---|
Response.Date |
Integer | Response timestamp |
Response.Status |
String | Response status: "SUCCEEDED" indicates success |
Response.Code |
Integer | HTTP status code, 200 indicates success |
Message.transactionId |
String | Unique transaction ID for this quote request |
Message.shipmentRequest |
Object | Returned quote request parameters (for confirmation) |
Message.carriers |
Array | List of available carriers |
carriers[].id |
String | Carrier unique ID (used for subsequent order placement) |
carriers[].code |
String | Carrier code (e.g., fedex, ups, gls) |
carriers[].name |
String | Carrier display name |
carriers[].price |
Integer | Price excluding tax (unit: cent) |
carriers[].priceIncTax |
Integer | Price including tax (unit: cent) |
carriers[].logo |
String | Carrier logo image URL |
carriers[].infos |
Object | Additional carrier information (transit time, size limits, pickup points, etc.) |
| Field | Type | Unit | Example | Description |
|---|---|---|---|---|
"weight": 3 |
Float [0-9](0,3) | Kilogram (kg) | 3 = 3 kg | Parcel weight unit is kilogram |
Within parcels array |
Array | Kilogram | {"weight": 8} = 8 kg |
All weight-related fields use kilograms |
Weight units
| Field | Type | Unit | Example | Description |
|---|---|---|---|---|
"weight": 3 |
Float [0-9](0,3) | Kilogram (kg) | 3 = 3 kg | Parcel weight unit is kilogram |
Within parcels array |
Array | Kilogram | {"weight": 8} = 8 kg |
All weight-related fields use kilograms |
Create a shipment
Once the customer has selected a carrier, submit its rate-response carrierId together with the shipment details.
/api/v3/shipments/checkoutThe uploaded Postman requests consistently use /api/v3/shipments/checkout, including the international examples. The old documentation also mentioned singular /shipment/checkout; this version follows the supplied Postman collection.
{
"transactionId": "TRANSACTION_ID_FROM_RATES",
"carrierId": "CARRIER_ID_FROM_RATES",
"shipmentRequest": {
"parcels": [
{
"weight": 1,
"reference": "ORDER-001"
}
],
"senderAddress": {
"firstName": "Alex",
"lastName": "Martin",
"company": "Example Sender SAS",
"email": "sender@example.com",
"phoneNumber": "+33100000000",
"street": "10 Rue Exemple",
"city": "Aubervilliers",
"postalCode": "93300",
"countryCode": "FR"
},
"receiverAddress": {
"firstName": "Sam",
"lastName": "Taylor",
"company": "Example Recipient",
"email": "recipient@example.com",
"phoneNumber": "+33100000001",
"street": "20 Rue Exemple",
"city": "Paris",
"postalCode": "75002",
"countryCode": "FR"
}
}
}The sample uses a France-to-France shipment without an invoice object.
{
"transactionId": "TRANSACTION_ID_FROM_RATES",
"carrierId": "CARRIER_ID_FROM_RATES",
"shipmentRequest": {
"parcels": [
{
"weight": 1,
"reference": "ORDER-001"
}
],
"senderAddress": {
"firstName": "Alex",
"lastName": "Martin",
"company": "Example Sender SAS",
"email": "sender@example.com",
"phoneNumber": "+33100000000",
"street": "10 Rue Exemple",
"city": "Aubervilliers",
"postalCode": "93300",
"countryCode": "FR"
},
"receiverAddress": {
"firstName": "Sam",
"lastName": "Taylor",
"company": "Example Recipient",
"email": "recipient@example.com",
"phoneNumber": "+41790000000",
"street": "10 Example Street",
"city": "Lausanne",
"postalCode": "1003",
"countryCode": "CH"
},
"invoice": {
"invoiceNumber": "INV-001",
"invoiceDate": "2026-10-24",
"invoiceItems": [
{
"denomination": "Clothing accessories",
"hsCode": "71179000",
"weight": "1",
"value": "90.40",
"quantity": "1",
"originCountry": "CN"
}
],
"fileFormat": "PDF",
"file": "BASE64_ENCODED_PDF_CONTENT"
}
}
}For customs shipments, include the invoice structure when required by the service. The invoice.file value is illustrative; replace it with the complete Base64-encoded PDF content.
Checkout response example
{
"Response": {
"Date": 1765452070,
"Status": "SUCCEEDED",
"Code": 200,
"Message": {
"transactionId": "EXAMPLE_TRANSACTION_ID",
"labels": "https://easy-express.fr/storage/file/pdf/example/combined.pdf",
"parcels": [
{
"ticket": "https://easy-express.fr/storage/file/pdf/example/parcel-1.pdf",
"tracking": "EXAMPLE_TRACKING_NUMBER"
}
]
}
}
}Response fields
| Field | Type | Description |
|---|---|---|
Response.Date |
Integer | Response timestamp |
Response.Status |
String | Response status: "SUCCEEDED" indicates success |
Response.Code |
Integer | HTTP status code, 200 indicates success |
Message.transactionId |
String | Unique transaction ID for the order |
Message.labels |
String | Download URL for the shipping label PDF (combined for all parcels) |
Message.parcels |
Array | Detailed information for each parcel |
parcels[].ticket |
String | Shipping label PDF URL for individual parcel |
parcels[].tracking |
String | Parcel tracking number |
| Field | Type | Description |
|---|---|---|
transactionId |
String (Length: 42) | Order unique identifier, recommended to be generated by the business system |
carrierId |
String | Carrier ID, obtained from the /rates interface |
parcels |
Array | Parcel list, includes weight, reference number, etc. |
senderAddress |
Object | Sender address information |
receiverAddress |
Object | Receiver address information |
invoice |
Object | Invoice information (required for cross-border shipping) |
Request fields
| Field | Type | Description |
|---|---|---|
transactionId |
String (Length: 42) | Order unique identifier, recommended to be generated by the business system |
carrierId |
String | Carrier ID, obtained from the /rates interface |
parcels |
Array | Parcel list, includes weight, reference number, etc. |
senderAddress |
Object | Sender address information |
receiverAddress |
Object | Receiver address information |
invoice |
Object | Invoice information (required for cross-border shipping) |
Customs invoice
The international checkout examples in the supplied Postman collection include shipmentRequest.invoice, with invoice metadata, line items, and an encoded invoice document.
Invoice field reference
| Field | Type | Required | Description |
|---|---|---|---|
carrierId |
String | Yes | Carrier ID obtained from the rates interface response |
invoice.file |
String | Yes | Base64 encoded string of the invoice file |
invoice.fileFormat |
String | Yes | Invoice format (e.g., pdf) |
invoice.invoiceItems |
Array | Yes | Product details (including HS code, country of origin, unit price, etc.) |
| Invoice item field | Meaning |
|---|---|
denomination | Product description |
hsCode | Customs HS code |
weight | Item weight (kg) |
value | Declared item value |
quantity | Item quantity |
originCountry | Country of origin (ISO alpha-2) |
The Postman file includes a real-world invoice encoded in Base64. It has deliberately been excluded from these public-facing examples and the downloadable sanitized collection.
Find tracking information
Look up a shipment using the search query q. The supplied Postman collection contains a request example, but no saved response example.
/api/v3/tracking/findRequest example
{
"q": "EXAMPLE_TRACKING_NUMBER"
}Response fields have not been specified in the supplied materials. Confirm their structure using your authenticated API environment.
Company information lookup
Search company information using a keyword and postal code. The supplied Postman collection names this example G-A.
/api/v3/infos/companyRequest example
{
"q": "Easy",
"zipcode": "93300"
}No saved response schema was supplied for this operation.
Address fields
Both senderAddress and receiverAddress use a similar structure. Some shipping services can require additional fields depending on destination.
| Field | Type / Length | Example | Description |
|---|---|---|---|
firstName |
String / 25 | "TestFirstName" | First name |
lastName |
String / 25 | "TestLastName" | Last name |
company |
String / 35 | "TestCompany" | Company name |
siret |
String / 20 | "82339490300038" | French company registration number |
shopName |
String / 35 | "TestShopName" | Shop name |
email |
String / 35 | "test@123.com" | Email address |
phoneNumber / mobileNumber |
String / 15 | "0600000000" | Phone/Mobile number |
street |
String / 35 | "8 Rue de la Haie Coq" | Street address |
city |
String / 35 | "Aubervilliers" | City |
postalCode |
String / 10 | "93300" | Postal code |
countryCode |
String / 2 | "FR" | Country code (ISO 3166-1 alpha-2) |
instructions |
String / 35 | "TestInstruction" | Delivery notes |
The collection also uses complement and stateProvinceCode; these are included in examples but length constraints were not documented in the original page.
Response envelope
Available saved examples use a top-level Response object with Date, Status, Code and Message. The example below shows the structure of a successful response.
{
"Response": {
"Date": 1765451621,
"Status": "SUCCEEDED",
"Code": 200,
"Message": {
"transactionId": "EXAMPLE_TRANSACTION_ID"
}
}
}No authoritative error-code catalogue or failure-response examples were provided. Do not assume the numeric Response.Code is always identical to the HTTP status.