Dashboard
Easy Parcel API system enables access through specific calls to the shipping estimate calculation engine, facilitating subsequent finalization of orders.
While all code examples are presented in PHP, it is feasible to develop these calls in any language and environment. For Windows, you can refer to the following page: https://stackoverflow.com/questions/4015324/how-to-make-http-post-web-request.
Last version: 1.1.20
History
This section contains the changelog of the 
Versions Table
| Version | Date | Description |
|---|---|---|
| 2024-06-14 | Improvements applied to the quotation API call to return the availability mode of the cash on delivery service in the servizi field. The letter C means CASH while the letter A means BANK CHECK TO THE SENDER.Apply the same improvements to the order API call which allows specifying the requested cash on delivery service mode in the contrassegno_modalita field by indicating C for CASH or A for BANK CHECK TO THE SENDER. A check is provided on the indicated value, if compatible with the result of the quotation. | |
| 2024-06-12 | Updated the order-fast API call to returns the global base64 encoded PDF and the consignment note number and the related single base64 encoded PDF for each package. | |
| 2024-06-07 | Updated the getwaybill API call to add the single_waybills field in the call. If set to Y, it returns the consignment note number and the related single base64 encoded PDF for each package. | |
| 2024-05-17 | Updated the answer of the tracking API call with the addition of the firma field which contains the name of who received and signed the shipment. | |
| 2024-04-12 | Updated the order API call with the addition of the destinatario->codicefiscale field required for foreign shipments. | |
| 2024-01-25 | Added new API call order-fast which, with a single call, makes a "quotation," followed by an "order," and then a "getwaybill," directly returning the produced waybill, also in Base64 format.Also added is the new API call getwaybill that returns the waybill, also in Base64, of a specific order. | |
| 2023-10-20 | Updated the quotation API call which now also returns the availability mode of the cash on delivery service in the new servizi field. The letter C means CASH while the letter A means BANK CHECK TO THE SENDER. | |
| 2023-10-17 | Updated the getorder response with the addition of the contrassegno_modalita field reporting "C" for cash and "A" for check. | |
| 2023-02-08 | Updated the response to the getorder request with the addition of the url_bordero field that returns the URL where to download the border to be delivered to the driver picking up the shipment. | |
| 2022-08-31 | Updated the response to the order request with the addition of the id_ordine field, which shows the numeric ID of the newly created order. | |
| 2022-07-14 | Updated the listorder request with the addition of pagination. It is now possible to pass 2 new data: paginazione for pagination, which defines the size of the returned list (default 10, max. 100) and pagina for page, which identifies the page to be displayed (default 1). The display order has also been reversed, from newest to oldest.In the response, the global number of orders, the pagination value and the returned page are returned respectively. | |
| 2022-06-29 | Updated the listorder request with the addition of the new filter field idcustomer to obtain the order list of the individual user. Package details with measurements and weights have also been added to the response. | |
| 2022-05-13 | Error 132 added in order request for carriers that cannot be purchased via API. | |
| 2022-04-14 | Updated the explanation of the newcustom request with a more correct description of mandatory and/or optional fields. | |
| 2021-09-16 | Updated the quotation request by adding shipment_type = I (import) and shipment_thing = P (pallets).Updated the order request which now accepts the coupon parameter for applying discounts in special campaigns.Updated the tracking request that now also accepts the waybill number (ldv) as a parameter.Added the new checkcoupon request that allows you to check the correctness and validity of the coupon. | |
| 2021-02-18 | Updated the quotation request with the addition of the maximum limit for marking and insurance. | |
| 2021-02-17 | Updated the order request with the addition of the shipment pickup request fields.Updated the getorder response with the addition of the field codice_ritiro (collection code), if requested. | |
| 2021-01-25 | Added the following requests: newcustomer, addfund and balance. | |
| 2020-05-25 | Updated the response of getorder request by adding the fields nome_vettore and logo_vettore that contains the name of the carrier and its logo, respectively. | |
| 2020-05-21 | Updated the response of the tracking request with the addition og the field codice_prenotazione (reservation code), which will be filled in only in the case of a pickup request and only when actually launched by the automated systems. | |
| 2020-04-23 | Updated the response of the quotation request to conform to the others. The optional version Updated the quotation call response to conform to the others. The optional version field has been added to force a response in a given version. If there is none, the response will be provided based on the version of the APIKEY activated. To request an APIKEY version update, please contact us. | |
| 2020-03-31 | Added new GetOrder, ListOrder and Tracking requests. | |
| 2019-12-01 | First revision of the API system. |
ApiKeyInfo
The apikeyinfo request allows you to get some information about your ApiKey and thus your contract with Easy Parcel API.
Example of apikeyinfo request in PHP:
$ch = curl_init("https://api.easyparcel.it/apikeyinfo/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"apikeyinfo"
}
JSON Request requirements
| Level 1 | Type | Value | Required | Description |
|---|---|---|---|---|
| call | string | apikeyinfo |
S | Type "apikeyinfo" |
JSON Response
{
"response":{
"azienda":"easyparcel.it",
"logo":"http://www.easyparcel.it/logo.jpg",
"system":"API",
"lastversion":"1.1.20",
"call":"apikeyinfo",
"dettagli":{
"apikey":"c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77",
"cliente":"EasyParcel Demo",
"attivazione":"2026-01-01",
"scadenza":"2026-12-31",
"ip_access":"Unlimited",
"limite_giornaliero":"Unlimited",
"fast_quote":"false",
"credito_prepagato":125.00,
"live":"true",
"email_ordine_mittente":"true",
"ldv_api":""
},
"timestamp":"2026-09-26 23:53:13"
}
}
Notes on JSON Response:
The JSON response contains the service activation date and the date of the next expiration of the license to use the Easy Parcel API. It also contains two configuration parameters for the purchased package that provide for blocking the system on specific IP addresses of the servers where the customer's system is installed and the daily limit, if any, on quotation calls. It also contains the remaining prepaid credit that allows the API call "order" to be able to proceed to finalize the purchase of the shipment, with the prepaid being charged.
Important
The value of the
The
Important
The value of the
live field identifies the mode of operation; if it is "false," "order" type calls do not finalize any real orders and therefore do not deduct credit.The
ldv_api field may optionally contain the address of a customer web service to which to send the tracking link and LDV (waybill) link data. It will be the customer's responsibility to store this information in their management system. The response will be of JSON type and will contain the following fields:
{
"result": "OK",
"errorcode": "0",
"errormessage": "WEBHOOK OK",
"codice_offerta": "6513ffbc66222",
"custom": "4102000000001348000003333002",
"lettera_vettura": "288364I031083",
"url_ldv": "https://api.easyparcel.it/ldv/LDV_demo.pdf",
"url_tracking": "https://www.poste.it/cerca/index.html#/risultati-spedizioni/288364I031083"
}
The call will be made when the LDV is generated (within a couple of minutes of ordering).
Quotation
The quotation call allows you to obtain the cost estimate for a shipment, according to specific parameters that are provided. In practice, some data is required about the place of departure, the destination and the type of shipment (national/international, package specifications, etc).
The Easy Parcel API system will calculate, if possible, the shipping cost based on the system's standard carriers or on those specifically enabled for the customer (and linked to their ApiKey). The responses detail the carrier used and any optional services that can be enabled (with their related costs).
Example of quotation call in PHP:
$ch = curl_init("https://api.easyparcel.it/quotation/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"quotation",
"dettagli":{
"tipo_spedizione":"N",
"cosa_spedire":"M",
"contenuto":"BISCOTTI",
"accessori":{
"contrassegno_importo":500
}
},
"colli":[
{
"peso":3.000,
"larghezza":30,
"profondita":20,
"altezza":15,
"nr_colli":1
}
],
"mittente":{
"cap":"00175",
"localita":"ROMA",
"provincia":"RM",
"nazione":"IT"
},
"destinatario":{
"cap":"20121",
"localita":"MILANO",
"provincia":"MI",
"nazione":"IT"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Level 3 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|---|
| call | string | quotation |
Y | Enter quotation |
||
| dettagli | idcustomer | numeric | 12345 |
optional | This field can be used to indicate the id of the customer within your own network on whose price list the estimate should be calculated. | |
| tipo_spedizione | string | N |
Y | N = nationalE = abroadI = import |
||
| cosa_spedire | string | M |
Y | D = documentsM = goods/parcelsP = pallets |
||
| contenuto | string | BISCOTTI |
Y | Enter the description of the contents | ||
| accessori | contrassegno_importo | decimal | 250.00 |
optional | Indicate the cash-on-delivery amount The service may not be available for some carriers |
|
| assicurazione_importo | decimal | 350.00 |
optional | Indicate the insurance amount The service may not be available for some carriers |
||
| consegnaalpiano | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
||
| consegnasuappuntamento | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
||
| priornotice | string | S |
optional | S = purchaseN = do not purchaseThe "Prior Notice" service can only be purchased for foreign shipments directed to the USA |
||
| colli | peso | decimal | 3.000 |
Y | Total weight of this series of packages, in kg | |
| larghezza | integer | 30 |
Y | Width of the single package in this series of packages (in cm) | ||
| profondita | integer | 20 |
Y | Depth of the single package in this series of packages (in cm) | ||
| altezza | integer | 15 |
Y | Height of the single package in this series of packages (in cm) | ||
| nr_colli | integer | 1 |
Y | Number of packages with the same dimensions in this series of packages | ||
| mittente | cap | string | 00175 |
Y | Sender's postal code | |
| localita | string | ROMA |
Y | Sender's town | ||
| provincia | string | RM |
Y | Sender's province | ||
| nazione | string | IT |
Y | Enter IT |
||
| destinatario | cap | string | 20121 |
Y | Recipient's postal code | |
| localita | string | MILANO |
Y | Recipient's town | ||
| provincia | string | MI |
Y | Recipient's province; for international shipments enter -- |
||
| country | string | IT |
Mandatory only for international shipments to the USA and Canada | Recipient's country/state, to be filled in only for the USA (link) and Canada (link) | ||
| nazione | string | IT |
Y | Recipient's country, use the ISO 3166-1 Alpha-2 code (link) |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"QUOTATION OK",
"quotation":[
{
"codice_offerta":"5dcc4a53b00fc",
"vettore":"SDAM",
"famiglia":"SDA",
"nome_vettore":"SDA",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_sda.png",
"consegna":"E",
"tempiconsegna":"24/48 ore",
"messaggio_tariffa":null,
"importo_tariffa":"10.62",
"totale_dovuto":"6.90",
"peso_volumetrico":3,
"flag_scontonazionale":null,
"flag_localitadisagiata":false,
"flag_localitaperiferica":false,
"flag_timecritical":false,
"percentualeiva":"22.00",
"serviziopzionali":{
"contrassegno":{
"attivabile":"S",
"importo":"5.00",
"limite_massimo":"1999.99",
"servizi":"C-A"
},
"assicurazione":{
"attivabile":"S",
"importo":"7.70",
"limite_massimo":"3000.00",
"valore_simulato":500
},
"consegnaalpiano":{
"attivabile":"S",
"importo":"4.00"
},
"consegnasuappuntamento":{
"attivabile":"S",
"importo":"6.00"
},
"trackingavanzato":{
"attivabile":"S",
"importo":"0.15"
},
"ritiro":{
"attivabile":"S",
"importo":"0.00"
}
}
},
{
"codice_offerta":"5dcc4a53ae412",
"vettore":"CROM",
"famiglia":"SDA",
"nome_vettore":"CRONO",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_cro.png",
"consegna":"E",
"tempiconsegna":"48 ore",
"messaggio_tariffa":null,
"importo_tariffa":"11.32",
"totale_dovuto":"7.36",
"peso_volumetrico":3,
"flag_scontonazionale":null,
"flag_localitadisagiata":false,
"flag_localitaperiferica":false,
"flag_timecritical":false,
"percentualeiva":"22.00",
"serviziopzionali":{
"contrassegno":{
"attivabile":"N"
},
"assicurazione":{
"attivabile":"N"
},
"consegnaalpiano":{
"attivabile":"S",
"importo":"4.00"
},
"consegnasuappuntamento":{
"attivabile":"S",
"importo":"6.00"
},
"trackingavanzato":{
"attivabile":"S",
"importo":"0.15"
},
"ritiro":{
"attivabile":"S",
"importo":"0.00"
}
}
},
{
"codice_offerta":"5dcc4a53af494",
"vettore":"PCE",
"famiglia":"SDA",
"nome_vettore":"PACCO CELERE",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_pce.png",
"consegna":"E",
"tempiconsegna":"48 ore",
"messaggio_tariffa":null,
"importo_tariffa":"14.14",
"totale_dovuto":"9.33",
"peso_volumetrico":3,
"flag_scontonazionale":null,
"flag_localitadisagiata":false,
"flag_localitaperiferica":false,
"flag_timecritical":false,
"percentualeiva":"22.00",
"serviziopzionali":{
"contrassegno":{
"attivabile":"N"
},
"assicurazione":{
"attivabile":"S",
"importo":"6.00",
"limite_massimo":"3000.00",
"valore_simulato":500
},
"consegnaalpiano":{
"attivabile":"N"
},
"consegnasuappuntamento":{
"attivabile":"N"
},
"trackingavanzato":{
"attivabile":"S",
"importo":"0.15"
},
"ritiro":{
"attivabile":"S",
"importo":"0.00"
}
}
}
],
"timestamp":"2026-09-26 23:53:13",
"version":"1.1.20"
}
Notes on the JSON response:
The JSON response contains an array of quotations offered by the various Carriers connected to the Easy Parcel API system. Each offer is identified by a
codice_offerta which must then be used in the "order" call to identify the estimate for purchasing the shipment. For each offer the reference carrier is returned, along with its logo, the amount due and also a series of additional information relating to any optional services that can be requested.
Order
The order call finalizes the order of a shipment, according to the specifications of a previous quotation, which must be indicated as the reference codice_offerta.
To complete the order, you must specify additional mandatory data regarding the sender and recipient names and the specification of any requested optional services, whose offers are contained in the referenced "quotation".
The Easy Parcel API system will reprocess everything, first verifying that the prepaid credit balance is sufficient. If the outcome is positive, the costs will be charged to the prepaid credit and the order is generated, which will be transmitted to the processing center for the subsequent management phases (sending confirmation email, generating the waybill, etc.).
Example of order call in PHP:
$ch = curl_init("https://api.easyparcel.it/order/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"order",
"dettagli":{
"codice_offerta":"5dcc4a53b00fc",
"note_cliente":"ACQUISTO DI TEST",
"custom":"XYZ123456",
"accessori":{
"trackingavanzato":"S"
}
},
"mittente":{
"nominativo":"Rossi Mario",
"indirizzo":"Via del Colosseo, 1",
"email":"mario@rossi.it",
"telefono":"",
"cellulare":"3471111111",
"contatto":"Rossi Mario",
"codicefiscale":"RSSMRA80A01H501U"
},
"destinatario":{
"nominativo":"Verdi Giuseppe",
"indirizzo":"Piazza Duomo, 1",
"email":"giuseppe@verdi.it",
"telefono":"",
"cellulare":"3472222222",
"contatto":"Verdi Giuseppe"
},
"ritiro":{
"prenotazione":"S",
"dettagli":{
"ritirodove":"M",
"disponibile_dal":"2026-09-26",
"disponibile_ora":"08:00",
"ritiro_mattina_dalle":"08:00",
"ritiro_mattina_alle":"12:00",
"ritiro_pomeriggio_dalle":"14:00",
"ritiro_pomeriggio_alle":"18:00"
}
}
}
JSON Request Requirements
| Level 1 | Level 2 | Level 3 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|---|
| call | string | order |
Y | Enter order |
||
| dettagli | codice_offerta | string | 5dcc4a53b00fc |
Y | Enter a codice_offerta from those received in response to the previous "quotation" call | |
| note_cliente | string | ACQUISTO DI TEST |
optional | Enter a text describing the purchase | ||
| custom | string | XYZ123456 |
optional | Free-text custom field for possible order search | ||
| coupon | string | ILOVEUSA21 |
optional | Enter the code of a possible discount coupon.N.B. The coupon should first be verified with the CheckCoupon call. |
||
| accessori | contrassegno | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
|
| assicurazione | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
||
| consegnaalpiano | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
||
| consegnasuappuntamento | string | S |
optional | S = purchaseN = do not purchaseThe service may not be available for some carriers |
||
| trackingavanzato | string | S |
optional | S = purchaseN = do not purchase |
||
| priornotice | string | S |
optional | S = purchaseN = do not purchaseThe "Prior Notice" service can only be purchased for foreign shipments directed to the USA |
||
| mittente | nominativo | string | Rossi Mario |
Y | Sender name | |
| indirizzo | string | Via del Colosseo, 1 |
Y | Sender address | ||
| string | mario@rossi.it |
Y | Sender email address | |||
| telefono | string | 0611111111 |
optional | Sender landline phone | ||
| cellulare | string | 3471111111 |
Y | Sender mobile phone | ||
| contatto | string | Rossi Mario |
Y | Sender contact | ||
| codicefiscale | string | RSSMRA80A01H501U |
Y | Sender tax code | ||
| destinatario | nominativo | string | Verdi Giuseppe |
Y | Recipient name | |
| indirizzo | string | Piazza Duomo, 1 |
Y | Recipient address | ||
| string | giuseppe@verdi.it |
Y | Recipient email address | |||
| telefono | string | 0222222222 |
optional | Recipient landline phone | ||
| cellulare | string | 34722222222 |
Y | Recipient mobile phone | ||
| contatto | string | Verdi Giuseppe |
Y | Recipient contact | ||
| codicefiscale | string | VRDGPP80A01H501U |
optional | Recipient tax code | ||
| ritiro | prenotazione | string | S |
optional | S = requestedN = not requestedThe service consists of collecting the shipment at the sender's location. |
|
| dettagli | ritirodove | string | M |
Y | M = at the Sender's addressP = at the Point's address, indicated in the idcustomer field of the quotation call. |
|
| disponibile_dal | date | 2026-09-26 |
Y | Date (in AAAA-MM-DD format) identifying from when the shipment is available for collection. | ||
| disponibile_ora | time | 08:00 |
Y | Time (in HH:MM format) identifying from when the shipment is available for collection. | ||
| ritiro_mattina_dalle | time | 08:00 |
Y | Time (in HH:MM format) identifying from when the shipment is available for collection. | ||
| ritiro_mattina_alle | time | 12:00 |
Y | Time (in HH:MM format) identifying from when the shipment is available for collection. | ||
| ritiro_pomeriggio_dalle | time | 14:00 |
Y | Time (in HH:MM format) identifying from when the shipment is available for collection. | ||
| ritiro_pomeriggio_alle | time | 18:00 |
Y | Time (in HH:MM format) identifying from when the shipment is available for collection. | ||
| dettagli > documenti (PDF customs documents) | ||||||
| dettagli | documenti[] | tipo_documento | string | export_declaration |
Conditional | Document type: export_declaration (free export declaration), proforma (proforma invoice), invoice (commercial invoice), extra (accessory documents, multiple). The attachments are collected into the order's "Extra Documents" and, for UPS/DHL carriers, are automatically attached to the shipment (paperless). |
| nome_file | string | packing_list.pdf | Optional | File name (used for documents of type extra). | ||
| contenuto_base64 | string | JVBERi0xLjQ... | Conditional | Content of the PDF file encoded in base64 (max 15 MB). | ||
| destinatario > country (state code for US/CA shipments) | ||||||
| destinatario | country | string | NY | Conditional | State/province code for shipments to US and Canada. Mandatory for such destinations: if missing, the order is rejected (errorcode 178). | |
JSON Response
{
"result":"OK",
"errorcode":"0",
"errormessage":"ACQUISTO OK",
"codice_offerta":"5dcc4a53b00fc",
"custom":"XYZ123456",
"ordine":"EAS-5dcc4a53b00fc",
"id_ordine":"1234567",
"importo":"6.90",
"timestamp":"2026-09-26 23:53:13",
"version":"1.1.20"}
OrderFast
Performs quotation + order + waybill generation in a single call.
Endpoint: POST https://api.easyparcel.it/order-fast/{APIKEY}.
PHP example:
$url = "https://api.easyparcel.it/order-fast/{APIKEY}";
$json = array(
"call" => "order-fast",
"details" => array(
"client_notes" => "TEST-SHIPMENT",
"content_notes" => "TEST-CONTENT",
"return_waybill_file" => TRUE,
"customer_id" => 15,
"carrier_code" => "SDAM",
"what_to_ship" => "M",
"custom" => "CUSTOMTEST",
"shipment_type" => "N",
"accessories" => array(
"cash_on_delivery_amount" => 1000,
"cash_on_delivery" => "Y",
"insurance_amount" => 500,
"insurance" => "Y",
"floor_delivery" => "N",
"appointment_delivery" => "N",
"prior_notice" => "N",
"assigned_port" => "N",
"recipient_pudo" => "",
"sender_pudo" => "",
"reverse" => "N"
)
),
"packages" => array(
array(
"weight" => 1.000,
"width" => 20,
"depth" => 22,
"height" => 24,
"number_of_packages" => 1
)
),
"sender" => array(
"name" => "ROSSI MARIO",
"address" => "VIA COLOSSEO, 1",
"postal_code" => "00175",
"city" => "ROMA",
"province" => "RM",
"country_code" => "IT",
"email" => "mario@rossi.it",
"phone" => "",
"mobile" => "3471111111",
"contact" => "ROSSI MARIO",
"tax_code" => "RSSMRA80A01H501U"
),
"recipient" => array(
"name" => "VERDI GIUSEPPE",
"address" => "PIAZZA DUOMO, 1",
"postal_code" => "20121",
"city" => "MILANO",
"province" => "MI",
"country_code" => "IT",
"email" => "giuseppe@verdi.it",
"phone" => "",
"mobile" => "3472222222",
"contact" => "VERDI GIUSEPPE",
"tax_code" => ""
),
"pickup" => array(
"reservation" => "Y",
"details" => array(
"pickup_where" => "M",
"available_from" => "2025-01-15",
"available_time" => "08:00",
"pickup_morning_from" => "08:00",
"pickup_morning_to" => "12:00",
"pickup_afternoon_from" => "14:00",
"pickup_afternoon_to" => "18:00"
)
)
);
$jsonRequest = json_encode($json);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest)
));
$result = curl_exec($ch);
$response = json_decode($result, TRUE);
print_r($response);
JSON Request Example
{
"call": "order-fast",
"details": {
"client_notes": "TEST-SHIPMENT",
"content_notes": "Various goods",
"return_waybill_file": true,
"customer_id": 15,
"carrier_code": "SDAM",
"what_to_ship": "M",
"custom": "CUSTOMTEST",
"shipment_type": "N",
"accessories": {
"cash_on_delivery_amount": 1000,
"cash_on_delivery": "Y",
"insurance_amount": 500,
"insurance": "Y",
"floor_delivery": "N",
"appointment_delivery": "N",
"prior_notice": "N",
"assigned_port": "N",
"recipient_pudo": "",
"sender_pudo": "",
"reverse": "N"
},
"hscodes": [
{
"hscode": "3004.90.10",
"description": "GENERIC MEDICINE",
"quantity": 2,
"amount": 15.00,
"weight": 0.100,
"export_reason": "SALE"
}
]
},
"packages": [
{
"weight": 1.000,
"width": 20,
"depth": 22,
"height": 24,
"number_of_packages": 1
}
],
"sender": {
"name": "ROSSI MARIO",
"address": "VIA COLOSSEO, 1",
"postal_code": "00175",
"city": "ROMA",
"province": "RM",
"country_code": "IT",
"email": "mario@rossi.it",
"phone": "",
"mobile": "3471111111",
"contact": "ROSSI MARIO",
"tax_code": "RSSMRA80A01H501U"
},
"recipient": {
"name": "VERDI GIUSEPPE",
"address": "PIAZZA DUOMO, 1",
"postal_code": "20121",
"city": "MILANO",
"province": "MI",
"country_code": "IT",
"email": "giuseppe@verdi.it",
"phone": "",
"mobile": "3472222222",
"contact": "VERDI GIUSEPPE",
"tax_code": ""
},
"pickup": {
"reservation": "Y",
"details": {
"pickup_where": "M",
"available_from": "2025-01-15",
"available_time": "08:00",
"pickup_morning_from": "08:00",
"pickup_morning_to": "12:00",
"pickup_afternoon_from": "14:00",
"pickup_afternoon_to": "18:00"
}
}
}
Request Parameters Table
| Level1 | Level2 | Level3 | Type | Example | Required | Description |
|---|---|---|---|---|---|---|
| call | string | order-fast |
Yes | Call type. Must be order-fast |
||
| details | ||||||
| details | client_notes | string | TEST-SHIPMENT |
Optional | Customer-visible notes on the shipment | |
| content_notes | string | Various goods |
Optional | Description of the shipment content | ||
| return_waybill_file | boolean | true |
Optional | If true, returns the waybill PDF in base64 in the ldv_base64 field |
||
| customer_id | integer | 15 |
Optional | Customer ID for specific tariff calculation (not public) | ||
| carrier_code | string | SDAM |
Yes | Carrier code for the shipment (e.g. SDAM, PDB, INPOST, BRT, GLS, etc.) | ||
| what_to_ship | string | M |
Yes | Type of goods: M = Merchandise, D = Documents, P = Pallets |
||
| custom | string | CUSTOMTEST |
Optional | Customer custom reference. Returned in the response. | ||
| shipment_type | string | N |
Yes | Shipment type: N = National, E = Abroad (export, to any foreign country), I = Import (from abroad to Italy) |
||
| details > accessories | ||||||
| details | accessories | cash_on_delivery | string | Y |
Optional | Enable cash on delivery. Y = Yes, N = No. If the service is not available for the carrier, the order is blocked (error 175). |
| cash_on_delivery_amount | decimal | 1000 |
Conditional | Cash on delivery amount. Required if cash_on_delivery=Y. If it exceeds the carrier's maximum limit, the order is blocked. |
||
| insurance | string | Y |
Optional | Enable insurance. Y = Yes, N = No. If the service is not available for the carrier, the order is blocked (error 175). |
||
| insurance_amount | decimal | 500 |
Conditional | Insurance amount. Required if insurance=Y. If it exceeds the carrier's maximum limit, the order is blocked. |
||
| floor_delivery | string | Y |
Optional | Floor delivery. Y = Yes, N = No. Subject to carrier availability. |
||
| appointment_delivery | string | Y |
Optional | Delivery by appointment. Y = Yes, N = No. Subject to carrier availability. |
||
| prior_notice | string | Y |
Optional | Prior phone notice. Y = Yes, N = No. Subject to carrier availability. |
||
| assigned_port | string | Y |
Optional | Assigned port (charges paid by recipient). Y = Yes, N = No. Subject to carrier availability. |
||
| recipient_pudo | string | Z6426 |
Conditional | Recipient PUDO code. For PDB: code obtained from the pudo call (validated against pdb_pudo table). For INPOST: locker code (validated against inpost_punti table), required together with sender_pudo. |
||
| sender_pudo | string | Z1234 |
Conditional | Sender PUDO code. For PDB: only available for reverse shipments. For INPOST: required together with recipient_pudo, the two codes must be different from each other. |
||
| reverse | string | Y |
Optional | Reverse shipment (return). Y = active, N = not active (default). Available for PDB. |
||
| details > hscodes (required for non-EU countries with customs) | ||||||
| details | hscodes[] | hscode | string | 3004.90.10 |
Yes | HS (Harmonized System) code. Format: 6-10 digits, with or without dots. The first 6 digits are validated against the international WCO database. |
| description | string | Medicine |
Yes | Description of the goods in natural language. | ||
| quantity | integer | 2 |
Yes | Number of items. Must be greater than 0. | ||
| amount | decimal | 15.00 |
Yes | Value of the goods in EUR. | ||
| weight | decimal | 0.100 |
Yes | Weight of the goods in kg. | ||
| export_reason | string | SALE |
Yes | Reason for export. Common values: SALE, GIFT, SAMPLE, RETURN, REPAIR, PERSONAL_EFFECTS. |
||
| details > documents (customs PDF documents) | ||||||
| details | documents[] | document_type | string | export_declaration |
Conditional | Document type: export_declaration (free export declaration), proforma (proforma invoice), invoice (commercial invoice), extra (additional documents, multiple). Attachments go into the order "Extra Documents" and, for UPS/DHL carriers, are automatically attached to the shipment (paperless). |
| document_filename | string | packing_list.pdf |
Optional | File name (used for extra documents). |
||
| document_base64 | string | JVBERi0xLjQ... |
Conditional | Base64-encoded PDF content (PDF only, max 15 MB). | ||
| packages | ||||||
| packages[] | weight | decimal | 1.000 |
Yes | Package weight in kg | |
| width | integer | 20 |
Yes | Package width in cm | ||
| depth | integer | 22 |
Yes | Package depth in cm | ||
| height | integer | 24 |
Yes | Package height in cm | ||
| number_of_packages | integer | 1 |
Yes | Number of packages with these dimensions | ||
| sender | ||||||
| sender | name | string | ROSSI MARIO |
Yes | Sender name / company name | |
| address | string | VIA COLOSSEO, 1 |
Yes | Sender address | ||
| postal_code | string | 00175 |
Yes | Sender postal code | ||
| city | string | ROMA |
Yes | Sender city | ||
| province | string | RM |
Yes | Sender province code | ||
| country_code | string | IT |
Yes | Sender country code (ISO 3166-1 alpha-2) | ||
| string | mario@rossi.it |
Optional | Sender email | |||
| phone | string | 0612345678 |
Optional | Sender phone number | ||
| mobile | string | 3471111111 |
Optional | Sender mobile number | ||
| contact | string | ROSSI MARIO |
Optional | Sender contact person | ||
| tax_code | string | RSSMRA80A01H501U |
Optional | Sender tax code or VAT number | ||
| recipient | ||||||
| recipient | name | string | VERDI GIUSEPPE |
Yes | Recipient name / company name | |
| address | string | PIAZZA DUOMO, 1 |
Yes | Recipient address | ||
| postal_code | string | 20121 |
Yes | Recipient postal code | ||
| city | string | MILANO |
Yes | Recipient city | ||
| province | string | MI |
Yes | Recipient province code | ||
| country_code | string | IT |
Yes | Recipient country code (ISO 3166-1 alpha-2) | ||
| string | giuseppe@verdi.it |
Optional | Recipient email | |||
| phone | string | 0287654321 |
Optional | Recipient phone number | ||
| mobile | string | 3472222222 |
Optional | Recipient mobile number | ||
| contact | string | VERDI GIUSEPPE |
Optional | Recipient contact person | ||
| tax_code | string | |
Optional | Recipient tax code or VAT number | ||
| state_code | string | CA |
Conditional | State/province code for shipments to US/CA (e.g. US state or Canadian province) | ||
| pickup | ||||||
| pickup | reservation | string | Y |
Optional | Pickup reservation. Y = Yes, N = No |
|
| details | pickup_where | string | M |
Conditional | Pickup location (required if reservation=Y) | |
| available_from | string | 2025-01-15 |
Conditional | Pickup availability date (YYYY-MM-DD format) | ||
| available_time | string | 08:00 |
Conditional | Pickup availability time (HH:MM format) | ||
| pickup_morning_from | string | 08:00 |
Conditional | Morning pickup start time | ||
| pickup_morning_to | string | 12:00 |
Conditional | Morning pickup end time | ||
| pickup_afternoon_from | string | 14:00 |
Conditional | Afternoon pickup start time | ||
| pickup_afternoon_to | string | 18:00 |
Conditional | Afternoon pickup end time | ||
JSON Response
{
"result": "OK",
"errorcode": "",
"errormessage": "",
"codice_offerta": "QUO-123456",
"custom": "CUSTOMTEST",
"ordine": "ORD-123456",
"id_ordine": 789012,
"importo": "8.50",
"lettera_vettura": "1Z999AA10123456784",
"url_ldv": "https://api.easyparcel.it/getwaybill/...",
"codice_ritiro": "RIT-123456",
"url_bordero": "https://api.easyparcel.it/getbordero/...",
"ldv_base64": "JVBERi0xLjQKMS...",
"single_waybills": [
{
"lettera_vettura": "1Z999AA10123456784",
"ldv_base64": "JVBERi0xLjQKMS..."
}
],
"timestamp": "2025-01-15 10:30:00",
"version": "1.1.20"
}
Note
- If an accessory service not available for the selected carrier is requested (e.g. cash on delivery, insurance, floor delivery, pickup), the order is blocked with a specific error (errorcode 175).
- If the cash on delivery or insurance amount exceeds the maximum limit for the carrier, the order is blocked.
- For INPOST shipments, both
sender_pudoandrecipient_pudofields are required and must contain valid locker codes that are different from each other. - For shipments to countries with customs (non-EU with
dogana=1), thehscodesfield is required. Each item must have a valid HS code (verified against the international 6-digit database), description, quantity, value, weight and export reason. Invalid HS codes will block the order. - The
single_waybillsfield contains individual waybill pages for multi-parcel shipments, each with its own waybill number and base64 PDF.
GetWaybill
The GetWaybill call allows you to obtain information related to the WAYBILL (AWB or waybill) of a specific order.
Example of getwaybill call in PHP:
$ch = curl_init("https://api.easyparcel.it/getwaybill/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array
(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest)
)
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"getwaybill",
"details": {
"order_id":1234567,
"waybill_base64":"Y"
"single_waybills":"Y"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Value | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | getwaybill |
Y | Enter "getwaybill" | |
| details | order_id | numeric | 1234567 |
Y | This field must indicate the order ID for which the waybill is requested. |
| waybill_base64 | string | N |
optional | Y = returns the content of the waybill file encoded in base64N = does not return the content of the waybill fileNote: By default, if not passed, this value is assumed to be N. |
|
| single_waybills | string | N |
optional | Y = returns the content of individual waybills encoded in base64 inside "single_waybills"N = does not return individual waybillsNote: By default, if not passed, this value is assumed to be N. |
JSON Response
{
"result":"OK",
"error_code":0,
"error_message":"GETWAYBILL OK",
"order_id":"1234567",
"custom":"ORD.123",
"waybill_number":"288988I018728",
"waybill_url":"https://api.easyparcel.it/ldv/5188175_66620f9322512.pdf",
"pickup_code":"CP95599292",
"bordero_url":"https://api.easyparcel.it/tmp/202_bordero_20240607000033.pdf",
"waybill_base64":"JVBERi0xLjQKJeLjz9MKNCAwIG9iago8PC9Db2xvclNwYWNv3r4rLCxCTVPiwIHj/wdBQUGjhw3...NDEzNTY2CiUlRU9GCg==",
"single_waybills":[
{
"waybill_number":"288988I018728",
"waybill_base64":"JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGl...ZgoyMDUwNDMKJSVFT0Y="
},
{
"waybill_number":"988IMFVYK288988I018728",
"waybill_base64":"JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGl...ZgoyMTAxNDAKJSVFT0Y="
}
],
"timestamp":"2026-09-26 23:53:13",
"version":"1.1.20"
}
Notes on the JSON response:
The JSON response contains all the data, if present, related to the Waybill, including its number and the URL where it can be downloaded. If the parameter
waybill_base64 with the value Y was included in the request, then the response will also contain the field waybill_base64 which will include the content of the waybill file encoded in "base64" standard that can be saved and made available to customers. Additionally, if the parameter single_waybills with the value Y was included in the request, the response will contain the field single_waybills with the content of individual waybills encoded in base64. When the order has attached documents (export declaration, invoice, extra attachments), the response also includes a documenti field: an array of objects with tipo, filename and url (a temporary "presigned" link valid for 1 hour to download the PDF).
TARIC Search
Assisted lookup of TARIC/HS codes from a natural-language product description.
Endpoint: POST https://api.easyparcel.it/taric-search/{APIKEY}.
The returned code must be passed to order-fast inside details.hscodes[].hscode for international shipments (required for countries with customs and for every foreign destination with PDBPLUS).
PHP example:
$url = "https://api.easyparcel.it/taric-search/{APIKEY}";
$json = array(
"call" => "taric-search",
"q" => "chocolate biscuits",
"lang" => "en",
"limit" => 5
);
$jsonRequest = json_encode($json);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
$result = curl_exec($ch);
$response = json_decode($result, TRUE);
print_r($response);
Alternatively, parameters can be passed in the query string:
GET https://api.easyparcel.it/taric-search/{APIKEY}?q=chocolate+biscuits&lang=en&limit=5
JSON Request Example
{
"call": "taric-search",
"q": "chocolate biscuits",
"lang": "en",
"limit": 5
}
Request Parameters Table
| Field | Type | Example | Required | Description |
|---|---|---|---|---|
| call | string | taric-search |
Yes | Call type. Must be taric-search (only needed when using the JSON body). |
| q | string | chocolate biscuits |
Yes | Product description in natural language (Italian or English). |
| lang | string | en |
Optional | Search language: it (default) or en. |
| limit | integer | 5 |
Optional | Maximum number of results (1 to 10, default 5). |
JSON Response
{
"result": "OK",
"call": "taric-search",
"query": "chocolate biscuits",
"results": [
{
"taric_code": "1905310000",
"description_it": "Biscotti dolci",
"description_en": "Sweet biscuits",
"confidence": 0.92
}
],
"timestamp": "2026-06-15 10:30:00"
}
Response Fields (results[])
| Field | Type | Example | Description |
|---|---|---|---|
| taric_code | string | 1905310000 |
10-digit TARIC code. Use it in order-fast as details.hscodes[].hscode (the first 6 digits are validated). |
| description_it | string | Biscotti dolci |
Official Italian description. |
| description_en | string | Sweet biscuits |
Official English description. |
| confidence | decimal | 0.92 |
Estimated match score (0.0 - 1.0). Results are sorted by descending confidence. |
Notes
- Authentication via API key, in the path (
/taric-search/{APIKEY}) or in theX-API-KEYheader. - The service only returns codes present in the customs catalogue: invalid suggestions are filtered out automatically.
- The
quantity,amount,weightandexport_reasonfields required byorder-fastare NOT provided by this search: they must be filled in by the client based on the goods. - If the search returns no results, try a more specific description or use English.
GetOrder
The getorder call allows you to view all the information related to a shipment order, and it can be searched by codice_offerta or by custom.
Example of getorder call in PHP:
$ch = curl_init("https://api.easyparcel.it/getorder/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"getorder",
"dettagli":{
"codice_offerta":"5dcc4a53b00fc",
"custom":"XYZ123456"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | getorder |
Y | Enter getorder |
|
| dettagli | codice_offerta | string | 5dcc4a53b00fc |
optional | Enter a codice_offerta from those received in response to a previous "order" call.Note: If not entered, the custom field becomes mandatory. |
| custom | string | XYZ123456 |
optional | Enter a custom from those specified in a previous "order" call.Note: If not entered, the codice_offerta field becomes mandatory. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"GETORDER OK",
"order":{
"codice_offerta":"5dcc4a53b00fc",
"data":"2026-01-03 10:41:08",
"utente":"0",
"ragionesociale":"ROSSI MARIO",
"indirizzo":"VIA DEL COLOSSEO, 1",
"cap":"00175",
"localita":"ROMA",
"provincia":"RM",
"codicefiscale":"RSSMRA80A01H501U",
"partitaiva":"",
"telefono":"",
"cellulare":"3471111111",
"email":"mario@rossi.it",
"cosa":"MERCE",
"peso_totale":"1.000",
"tipo_spedizione":"N",
"vettore":"SDAM",
"nome_vettore":"SDA",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_sda.png",
"mittente_nominativo":"ROSSI MARIO",
"mittente_indirizzo":"VIA DEL COLOSSEO, 1",
"mittente_localita":"ROMA",
"mittente_provincia":"RM",
"mittente_cap":"00175",
"mittente_email":"mario@rossi.it",
"mittente_telefono":"",
"mittente_cellulare":"3471111111",
"mittente_contatto":"ROSSI MARIO",
"mittente_cf":"RSSMRA80A01H501U",
"destinatario_nominativo":"VERDI GIUSEPPE",
"destinatario_indirizzo":"PIAZZA DUOMO, 1",
"destinatario_localita":"MILANO",
"destinatario_cap":"20121",
"destinatario_provincia":"MI",
"destinatario_nazione":"IT",
"destinatario_esterocap":null,
"destinatario_country":null,
"destinatario_email":"giuseppe@verdi.it",
"destinatario_telefono":"",
"destinatario_cellulare":"3472222222",
"destinatario_contatto":"VERDI GIUSEPPE",
"consegna":"E",
"totale_dovuto":"6.90",
"percentualeiva":"22",
"importo_tariffa":"10.62",
"peso_volumetrico":"1.000",
"contrassegno":"N",
"contrassegno_importo":"0.00",
"contrassegno_modalita":"C",
"assicurazione":"N",
"assicurazione_importo":"0.00",
"consegnaalpiano":"N",
"appuntamento":"N",
"priornotice":"N",
"ritiro":"N",
"ritiro_dove":null,
"ritiro_disp_data":null,
"ritiro_disp_ora":null,
"ritiro_matt_da":null,
"ritiro_matt_a":null,
"ritiro_pom_da":null,
"ritiro_pom_a":null,
"note_cliente":"ACQUISTO DI TEST",
"note_contenuto":"BISCOTTI",
"custom":"XYZ123456",
"lettera_vettura":null,
"url_ldv":null,
"codice_ritiro":null,
"live":"0",
"idordine":1234567,
"url_bordero":"https://api.easyparcel.it/tmp/1234_bordero_20230208160810.pdf"
},
"dettagli":[
{
"peso":"3.000",
"larghezza":"30",
"profondita":"20",
"altezza":"15",
"nr_colli":"1"
}
],
"timestamp":"2026-09-26 23:53:13",
"version":"1.1.20"
}
Notes on the JSON response:
The JSON response contains all the data related to the storage of the order
ListOrder
The listorder call allows you to obtain a list of shipments filtered by the selected period and/or user id.
Example of listorder call in PHP:
$ch = curl_init("https://api.easyparcel.it/listorder/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"listorder",
"dettagli":{
"data_inizio":"2024-01-01",
"data_fine":"2024-01-15",
"idcustomer":"12345",
"paginazione":25,
"pagina":3
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | listorder |
Y | Enter listorder |
|
| dettagli | data_inizio | string | 2024-01-01 |
optional | Enter a period start date in the format YYYY-MM-DD.Note: If not entered, today's date is used. |
| data_fine | string | 2024-01-15 |
optional | Enter a period end date in the format YYYY-MM-DD.Note: If not entered, today's date is used. |
|
| idcustomer | numeric | 12345 |
optional | Enter the ID of a user within your own network.Note: If not entered, the list of all orders is shown. |
|
| paginazione | numeric | 25 |
optional | Enter the pagination size, i.e. the number of orders that will be returned by the call.Note: If not entered, the list of the first 10 orders is shown; the maximum pagination is 100 orders. |
|
| pagina | numeric | 2 |
optional | Enter the number of the page to display.Note: If not entered, the first page of the order list is shown. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"LISTORDER OK",
"nrordini":38,
"paginazione":25,
"pagina":2,
"orders":[
{
"codice_offerta":"5dcc4a53b00fc",
"data":"2020-04-14 18:41:08",
"cosa":"MERCE",
"peso_totale":"1.000",
"tipo_spedizione":"N",
"vettore":"SDAM",
"nome_vettore":"SDA",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_sdam.png",
"mittente_nominativo":"Rossi Mario",
"mittente_localita":"ROMA",
"mittente_provincia":"RM",
"mittente_cap":"00175",
"destinatario_nominativo":"Verdi Giuseppe",
"destinatario_localita":"MILANO",
"destinatario_cap":"20121",
"destinatario_provincia":"MI",
"destinatario_nazione":"IT",
"destinatario_esterocap":null,
"destinatario_country":null,
"consegna":"E",
"totale_dovuto":"6.90",
"peso_volumetrico":"1.000",
"note_cliente":"ACQUISTO DI TEST",
"note_contenuto":"BISCOTTI",
"custom":"XYZ123456",
"lettera_vettura":null,
"idcustomer":"12345",
"live":"0",
"colli":[
{
"nr_colli":"1",
"lunghezza":"10",
"larghezza":"20",
"altezza":"30",
"peso":"3.500"
}
]
},
{
"codice_offerta":"5dcc4a53b00fg",
"data":"2020-04-14 18:55:32",
"cosa":"MERCE",
"peso_totale":"3.000",
"tipo_spedizione":"N",
"vettore":"SDAM",
"nome_vettore":"SDA",
"logo_vettore":"https://www.easyparcel.it/api/loghi/logo_sdam.png",
"mittente_nominativo":"Rossi Maria",
"mittente_localita":"ROMA",
"mittente_provincia":"RM",
"mittente_cap":"00178",
"destinatario_nominativo":"Verdi Giuseppina",
"destinatario_localita":"MILANO",
"destinatario_cap":"20128",
"destinatario_provincia":"MI",
"destinatario_nazione":"IT",
"destinatario_esterocap":null,
"destinatario_country":null,
"consegna":"E",
"totale_dovuto":"8.20",
"peso_volumetrico":"3.000",
"note_cliente":"ACQUISTO DI TEST",
"note_contenuto":"VESTITI",
"custom":"XYZ123457",
"lettera_vettura":null,
"idcustomer":"12345",
"live":"0",
"colli":[
{
"nr_colli":"1",
"lunghezza":"18",
"larghezza":"28",
"altezza":"3",
"peso":"0.454"
}
]
}
],
"timestamp":"2024-01-19 09:31:59"
}
Notes on the JSON response:
The JSON response contains the paginated list of orders for the selected period and, optionally, for the selected user, with some identifying data for each order.
Tracking
The tracking call allows you to obtain the link to view the tracking of a shipment, which can be searched by codice_offerta, by custom or through ldv.
Example of tracking call in PHP:
$ch = curl_init("https://api.easyparcel.it/tracking/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"tracking",
"dettagli":{
"codice_offerta":"5dcc4a53b00fc",
"custom":"XYZ123456"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | tracking |
Y | Enter tracking |
|
| dettagli | codice_offerta | string | 5dcc4a53b00fc |
optional | Enter a codice_offerta from those received in response to a previous "order" call.Note: You must indicate a codice_offerta, a custom or a ldv. |
| custom | string | XYZ123456 |
optional | Enter a custom from those indicated in a previous "order" call.Note: You must indicate a codice_offerta, a custom or a ldv. |
|
| ldv | string | 288016E049120 |
optional | Enter a ldv to search for.Note: You must indicate a codice_offerta, a custom or a ldv. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"TRACKING OK",
"tracking":{
"codice_offerta":"5e95d42de07a6",
"custom":"XYZ123456",
"lettera_vettura":"288016E049120",
"url_tracking":"https://www.poste.it/cerca/index.html#/risultati-spedizioni/288364I031083",
"codice_prenotazione":"CP1234567890"
},
"dettagli":[
{
"id": 1,
"data":"2020-04-15",
"ora":"12:41:00",
"status":"RIT",
"descrizione":"RITIRATA",
"note":"LA SPEDIZIONE E' STATA RITIRATA PRESSO IL MITTENTE",
"filiale":"Catanzaro"
},
{
"id": 2,
"data":"2020-04-15",
"ora":"16:10:02",
"status":"PPP",
"descrizione":"PARTITA",
"note":"LA SPEDIZIONE E' PARTITA",
"filiale":"Catanzaro"
},
{
"id": 3,
"data":"2020-04-16",
"ora":"10:54:00",
"status":"PPP",
"descrizione":"PARTITA",
"note":"LA SPEDIZIONE E' PARTITA",
"filiale":"Roma Hub Espresso"
},
{
"id": 4,
"data":"2020-04-16",
"ora":"10:55:00",
"status":"THE",
"descrizione":"SMISTATO HUB ED INOLTRATO",
"note":"IN TRANSITO",
"filiale":"Roma Hub Espresso"
},
{
"id": 5,
"data":"2020-04-17",
"ora":"04:18:00",
"status":"PPP",
"descrizione":"PARTITA",
"note":"LA SPEDIZIONE E' PARTITA",
"filiale":"Hub Espresso Piacenza"
},
{
"id": 6,
"data":"2020-04-17",
"ora":"04:18:00",
"status":"THE",
"descrizione":"SMISTATO HUB ED INOLTRATO",
"note":"IN TRANSITO",
"filiale":"Hub Espresso Piacenza"
},
{
"id": 7,
"data":"2020-04-17",
"ora":"12:25:00",
"status":"000",
"descrizione":"LA SPEDIZIONE E' STATA CONSEGNATA",
"note":"LA SPEDIZIONE E' STATA CONSEGNATA",
"filiale":"Hub Espresso Piacenza",
"firma":"Rossi Mario"
}
],
"timestamp":"2024-01-19 09:31:59"
}
Notes on the JSON response:
The JSON response contains all the data related to the tracking of the shipment, and for the SDA carrier the full detail is also available in the dedicated field.
NewCustomer
The newcustomer call allows you to create a new user in your network.
Example of newcustomer call in PHP:
$ch = curl_init("https://api.easyparcel.it/newcustomer/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"newcustomer",
"dettagli":{
"cognome":"ROSSI",
"nome":"MARIO",
"indirizzo":"PIAZZA DUOMO, 1",
"cap":"20121",
"localita":"MILANO",
"provincia":"MI",
"nazione":"IT",
"email":"mariorossi@gmail.com",
"telefono":"0212345678",
"cellulare":"3470123456",
"ragionesociale":"ROSSI MARIO SLRS",
"codicefiscale":"RSSMRA11A11A111A",
"partitaiva":"01234567890",
"fe_pec":"rossimario@pec.it",
"fe_sdi":"0000000",
"banca":null,
"iban":null,
"intestazioneconto":null,
"username":"mariorossi",
"password":"12345678"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | newcustomer |
Y | Enter newcustomer |
|
| dettagli | cognome | string | ROSSI |
Y | Enter the customer's last name. |
| nome | string | MARIO |
Y | Enter the customer's first name. | |
| indirizzo | string | PIAZZA DUOMO, 1 |
Y | Enter the customer's address. | |
| cap | string | 20121 |
Y | Enter the customer's postal code. | |
| localita | string | MILANO |
Y | Enter the customer's city. | |
| provincia | string | MI |
Y | Enter the abbreviation of the customer's Italian province.N.B. For a foreign customer, fill in this field as follows: -- |
|
| nazione | string | IT |
Y | Enter the abbreviation of the customer's country, using the ISO 3166-1 Alpha-2 code (link). | |
| string | mariorossi@gmail.com |
Y | Enter the customer's email. | ||
| telefono | string | 0212345678 |
optional | Enter the customer's phone number. | |
| cellulare | string | 3470123456 |
optional | Enter the customer's mobile phone number. | |
| ragionesociale | string | ROSSI MARIO SLRS |
optional | Enter the customer's company name, if any. | |
| codicefiscale | string | RSSMRA11A11A111A |
Y | Enter the customer's tax code. | |
| partitaiva | string | 01234567890 |
optional | Enter the customer's VAT number, if any.N.B. Mandatory field if the ragionesociale field is filled in. |
|
| fe_pec | string | marirossi@pec.it |
optional | Enter the customer's PEC, if any.N.B. Mandatory field if the ragionesociale field is filled in (not mandatory for a foreign customer). |
|
| fe_sdi | string | 0000000 |
Y | Enter the customer's SDI, if any (enter 0000000 for a private individual). | |
| banca | string | CREDITO EMILIANO SPA |
optional | Enter the name of the customer's bank. | |
| iban | string | IT1A12341234123412341234123 |
optional | Enter the customer's IBAN, if any.N.B. Field required for cash-on-delivery remittance. |
|
| intestazioneconto | string | ROSSI MARIO |
optional | Enter the exact name of the holder of the customer's bank account. | |
| username | string | mariorossi |
Y | Enter the customer's login username. | |
| password | string | 12345678 |
Y | Enter the customer's login password. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"NEWCUSTOMER OK",
"id_dva":3723,
"timestamp":"2024-01-19 09:31:59"
"version":"1.1.20"}
Notes on the JSON response:
The JSON response contains the
id_dva field, which is the new ID of the created customer, to be used for subsequent calls.
AddFund
The addfund call allows you to transfer prepaid credit from the group leader's master account to the customer's account.
Example of addfund call in PHP:
$ch = curl_init("https://api.easyparcel.it/addfund/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"addfund",
"dettagli":{
"idcustomer":3723,
"amount":100.00
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | addfund |
Y | Enter addfund |
|
| dettagli | idcustomer | numeric | 3723 |
Y | Enter the ID of the customer to transfer the funds to. |
| amount | decimal | 100.00 |
Y | Enter the amount to transfer to the customer. The group leader's master credit must be greater than or equal to the amount to transfer to the customer. In case of a decimal amount, use the DOT and not the COMMA as the decimal separator. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"ADDFUND OK",
"timestamp":"2024-01-19 09:31:59",
"version":1.1.14}
Balance
The balance call allows you to obtain the remaining credit value of the master account and, optionally, of the customer specified in the call.
Example of balance call in PHP:
$ch = curl_init("https://api.easyparcel.it/balance/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"balance",
"dettagli":{
"idcustomer":3723
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | balance |
Y | Enter balance |
|
| dettagli | idcustomer | numeric | 3723 |
optional | Optionally enter the ID of the customer whose remaining credit you want to check. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"BALANCE OK",
"balance_master":245.90,
"balance_customer":23.75,
"timestamp":"2024-01-19 09:31:59",
"version":1.1.14}
Notes on the JSON response:
The JSON response always contains the
balance_master field, which is the remaining credit of the master account, and contains the balance_customer field only if the dettagli->idcustomer field was specified in the request.
PUDO
The pudo call allows you to search for available pickup and delivery points for PDB (Poste Delivery Business) and INPOST carriers.
Example pudo call in PHP:
$ch = curl_init("https://api.easyparcel.it/pudo/YOUR_API_KEY");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request - PDB example (search by province)
{
"carrier": "PDB",
"province": "MI",
"type": "FMP",
"limit": 50
}
JSON Request - INPOST example (search by radius from postal code)
{
"carrier": "INPOST",
"postal_code": "20121",
"radius": 15,
"limit": 20
}
JSON Request - Example with GPS coordinates
{
"carrier": "INPOST",
"lat": 45.4642,
"lon": 9.1900,
"radius": 5,
"limit": 10
}
JSON Request Parameters
| Parameter | Type | PDB | INPOST | Required | Description |
|---|---|---|---|---|---|
carrier |
string | ✓ | ✓ | Y | PDB or INPOST |
postal_code |
string | ✓ | ✓ | N | Postal code. If specified with radius, used as center for geographic search. Otherwise filters by exact postal code. |
province |
string | ✓ | ✓ | N | Province abbreviation (e.g. MI, RM) |
city |
string | ✓ | ✓ | N | City name (partial search) |
search |
string | ✓ | ✓ | N | Free text search on code, name, address |
radius |
number | ✓ | ✓ | N | Search radius in km (default: 10). Requires postal_code or lat/lon. |
lat |
number | ✓ | ✓ | N | Reference point latitude (alternative to postal code for geographic search) |
lon |
number | ✓ | ✓ | N | Reference point longitude |
type |
string | ✓ | ✓ | N | PDB: FMP (Post Office), APT (Punto Poste), RTZ (Poste Locker)INPOST: parcel_locker |
status |
string | ✓ | N | INPOST only. Default: Operating. Filter by point status. |
|
location_type |
string | ✓ | N | INPOST only. Indoor or Outdoor. |
|
locale |
string | ✓ | ✓ | N | it (default) or en. Translates field names in the response. |
limit |
number | ✓ | ✓ | N | Maximum number of results (default: 100, max: 1000) |
JSON Response - PDB
{
"result": "OK",
"carrier": "PDB",
"count": 2,
"points": [
{
"code": "005640",
"type": "FMP",
"name": "MILANO 35",
"address": "VIA OSCAR WILDE 2",
"city": "MILANO",
"postal_code": "20154",
"province": "MI",
"latitude": 45.4874,
"longitude": 9.1726,
"distance_km": 1.23
}
]
}
JSON Response - INPOST
{
"result": "OK",
"carrier": "INPOST",
"count": 2,
"points": [
{
"code": "ITMIL089426D",
"status": "Operating",
"postal_code": "20121",
"city": "Milano",
"province": "MI",
"address": "Via Torino",
"latitude": 45.4631,
"longitude": 9.1882,
"type": "parcel_locker",
"location_type": "Indoor",
"distance_km": 0.54
}
]
}
Notes on the JSON response:
- The
distance_kmfield is present only when the search was performed by geographic radius (viapostal_codewithradius, orlat/lon). Results are sorted by ascending distance. - For PDB the types are:
FMP(Post Office),APT(Punto Poste),RTZ(Poste Locker). - For INPOST points with
statusother thanOperatingare not active and cannot be used for shipments. - The codes returned in the
codefield are the ones to use in thepudo_mittenteandpudo_destinatariofields of theorder-fastcall. - For INPOST both
pudo_mittenteandpudo_destinatariofields are required and must be different from each other.
CheckCoupon
The checkcoupon call allows you to verify the correct applicability of the discount coupon to a shipment.
Example of checkcoupon call in PHP:
$ch = curl_init("https://api.easyparcel.it/checkcoupon/c2fbbf11fdb3b18a20d543eeebdb057232c9c20b9ce850d60ce74ec36b0a8a77");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonRequest);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonRequest))
);
$jsonResult = curl_exec($ch);
JSON Request
{
"call":"checkcoupon",
"dettagli":{
"idcustomer":3723,
"vettore":"UPS21S",
"peso_totale":8.00,
"tipo_spedizione":"E",
"cosa_spedire":"M",
"provincia":"RM",
"nazione":"US",
"coupon" => "ILOVEUSA21"
}
}
JSON Request Requirements
| Level 1 | Level 2 | Type | Example | Mandatory | Description |
|---|---|---|---|---|---|
| call | string | checkcoupon |
Y | Enter checkcoupon |
|
| dettagli | idcustomer | numeric | 3723 |
Y | Enter the ID of the customer who owns the coupon. |
| vettore | string | UPS21S |
Y | Enter the carrier code. | |
| peso_totale | string | 8.00 |
Y | Enter the total weight of the shipment. | |
| tipo_spedizione | string | N |
Y | N = domesticE = foreignI = import |
|
| cosa_spedire | string | M |
Y | D = documentsM = goods/parcelsP = pallets |
|
| provincia | string | RM |
Y | Enter the code of the Italian province of origin of the shipment.Note: In case of import, indicate the Italian province of destination. |
|
| nazione | string | US |
Y | Enter the code of the destination country of the shipment.Note: In case of import, indicate the country of origin. |
|
| coupon | string | ILOVEUSA21 |
Y | Enter the code of the coupon to apply to the shipment. |
JSON Response
{
"result":"OK",
"errorcode":0,
"errormessage":"CHECKCOUPON OK",
"errordetails":"Previsto sconto del 5%",
"timestamp":"2024-01-19 09:31:59",
"version":"1.1.20"}
Notes on the JSON response:
The JSON response always contains the
errorcode field, which indicates whether the coupon is valid or not, while the errodetails field reports the value of the coupon or the type of error.
Errors
This section contains the list and meaning of all the possible errors that API calls to the
system may return.
Example of JSON error response
{
"result" => "KO",
"errorcode" => "110",
"errormessage" => "JSON - Errore sui campi",
"errordetails" => "Campo 'mittente->cap' mancante o non corretto",
"timestamp":"2024-01-19 09:31:59"
}
Notes on the JSON response:
The
system responds with an HTTP_RESPONSE_CODE through the PHP function
In case of an error, the API function returns a JSON that contains the details of the error, so that it is possible to identify and fix them.
system responds with an HTTP_RESPONSE_CODE through the PHP function http_response_code. A 200 response identifies a successful response, while a 400 response identifies the detection of an error.In case of an error, the API function returns a JSON that contains the details of the error, so that it is possible to identify and fix them.
Error codes table
| ErrorCode | ErrorMessage | Description |
|---|---|---|
| NESSUN ERRORE | The operation was completed successfully. | |
| APIKEY - Non valida | The APIKEY code used in the call is not a valid key. | |
| APIKEY - Chiave scaduta | The APIKEY code used in the call has expired and needs to be renewed in order to keep working. | |
| APIKEY - Servizio non disponibile per questo indirizzo IP | The call comes from an IP address that is not authorized for this APIKEY code. | |
| APIKEY - Limite giornaliero chiamate superato | The call has exceeded the daily limit for this APIKEY code. | |
| JSON - Manca il file | The JSON file that must be passed to the function via POST is missing. | |
| JSON - Errore sui campi | The JSON file passed does not meet the requirements for the call. The errordetails field details the incorrect or missing values. |
|
| USER Credito esaurito | The remaining credit does not allow the purchase to be completed. | |
| ORDER GiĆ memorizzato | The offer code has already been processed and therefore the purchase cannot be duplicated. Purchase not completed. | |
| ORDER Errore in fase di memorizzazione | The purchase could not be saved. Purchase not completed. Contact support. | |
| ORDER Errore in fase di memorizzazione (2) | The purchase could not be saved because a carrier was selected that does not currently allow a purchase via API. Purchase not completed. | |
| NEWCUSTOMER Funzione non disponibile | Function not available for this account. | |
| NEWCUSTOMER Errore in fase di memorizzazione | The new customer could not be saved. Contact support. | |
| ADDFUND Funzione non disponibile | Function not available for this account. | |
| ADDFUND Credito non sufficiente | The master account does not have enough credit to top up the customer. | |
| ADDFUND Cliente non corretto | The specified customer does not exist or is not part of the network. | |
| BALANCE Funzione non disponibile | Function not available for this account. | |
| BALANCE Cliente non corretto | The specified customer does not exist or is not part of the network. |