Skip to Content
Client API 2026-09Poste Returns

Poste Returns

A return (restituzione, Poste Reverse) is a Poste waybill that brings the parcel from the recipient back to your return address, through an acceptance channel. It exists in two forms:

  1. Issued with the shipment — Poste Andata & Ritorno: the return label is created together with the outbound one.
  2. Booked on demand on an existing domestic Poste shipment, through POST /shipments/{ldv}/return.

In both cases the shipment carries the return LDV in returnTrackingNumber, and the tracking.update webhook carries it as return_ldv.

Return label issued with the shipment

Available on Poste Business Express contracts (accessory service Andata & Ritorno, APT000929), Italy only. The shipment is created with returnTrackingNumber.

By default the return label follows the outbound label in the same file (label.pdf / label.zpl). With "options": { "returnLabel": "separate" } it comes apart:

{ "trackingNumber": "DEMO05407027", "returnTrackingNumber": "DEMO05407028", "...": "...", "label": { "format": "PDF", "pdf": "<base64>", "zpl": null }, "returnLabel": { "trackingNumber": "DEMO05407028", "pdf": "<base64>", "zpl": null, "code": null } }
FieldTypeDescription
returnLabelobject|nullOnly with returnLabel=separate; null when the shipment has no return label
returnLabel.trackingNumberstringLDV of the return (returnTrackingNumber)
returnLabel.pdf, returnLabel.zplstring|nullBase64, in the format Poste issued it
returnLabel.codestring|nullBase64 GIF of the 2D code of a paperless return; pdf and zpl are then null

The same returnLabel=merged|separate parameter works on GET /shipments/{ldv}/label. If Poste confirms the outbound shipment but not the return, the shipment is created with hasWarning: true.

Book a return

POST /shipments/{ldv}/return — rate limit 30 / min · requires an active subscription

Books a Poste return on a domestic Poste shipment (Business Express or Standard) that has no return yet. Poste charges it only at the first scan, and so does the platform: a booked return that is never used costs nothing.

FieldTypeRequiredDescription
channelstringYesAcceptance channel, see below
paperlessbooleanNoNo label: the recipient shows a 2D code (returnLabel.code). Only with Punto Poste and post office
channelWhere the parcel is handed overLimits
APT000928Home pickup
APT000979Punto Poste shopmax 36 × 37 × 56 cm, 15 kg
APT000980Punto Poste Lockermax 36 × 37 × 56 cm, 15 kg
APT000981Post officesum of the sides under 150 cm, each side under 100 cm, under 30 kg
{ "channel": "APT000979", "paperless": true }
HTTPcodeWhen
402subscription_required · subscription_payment_failed · plan_limit_reachedSubscription missing, unpaid or limit reached
404not_foundUnknown LDV
409invalid_stateNot a domestic Poste shipment, or it already has a return
422validation_failedUnknown channel; return address of the pickup point incomplete or outside Italy; parcel beyond the limits of the channel
422carrier_errorThe channel is not configured on the platform
502carrier_errorPoste refused the booking; the reason is in message

Read a return

GET /shipments/{ldv}/return?files=1

The return of the shipment, whichever way it was created. Without files the object comes without returnLabel; with files=1 the label or the 2D code is included. 404 not_found when the shipment has no return.

FieldTypeDescription
trackingNumber, returnTrackingNumberstringOutbound and return LDV
statusstringpending — booked, not scanned yet; billed — Poste scanned it, the return became a shipment of its own; failed — see error; issued — a round-trip return issued before returns were tracked
automaticbooleanBooked by the platform when the shipment was created (account option); it prints as the second page of the label
roundTripbooleanThe return of an Andata & Ritorno: paid with the outbound shipment, tracked the same way but never charged
channel, paperlessstring|null, boolean
estimatedPricenumber|nullCharged only if the return is used
firstEventAt, lastCheckedAtdatetime|nullFirst Poste scan and last tracking check
billedShipmentobject|nullOnce billed: { id, trackingNumber, cost, manifestId } of the return shipment, which has its own tracking
error, warningstring|nullPoste messages about the return
returnLabelobject|nullWith files=1

Once a return is billed, follow it like any shipment with GET /shipments/{returnTrackingNumber}/tracking.

Last updated on