Skip to Content
Client API 2026-09Migrating from API v2

Migrating from API v2

The API v2 (/api/v2/*, /api/v2.1/*), the Basic-auth /api/v1/* and /api/tracking/{ldv} are deprecated since 3 September 2026 and will be retired on 28 February 2027. Until then they keep working unchanged; every response carries:

Deprecation: @1788393600 Sunset: Sun, 28 Feb 2027 23:59:59 GMT Link: <https://<subdomain>.spedisci.online/api/2026-09>; rel="successor-version", <https://apidocs.spedisci.online>; rel="deprecation"

The driver app endpoints (/api/v2/driver/*) are not affected.

What changes

API v2Client API 2026-09
Base URL/api/v2//api/2026-09/
AuthenticationStatic API key as bearer tokenOAuth2 token (1 hour) from an App’s client_id / client_secret — see Authentication
StyleRPC-like POST endpointsREST resources, GET/POST/PUT/DELETE
Field namesMixed (shipFrom, codValue, label_format, rif_dest…)camelCase with typed value objects (Money, Weight, Dimensions)
UnitsImplicit kg / cmExplicit units (KG/G, CM/MM)
ErrorsVarious shapes, HTTP 400/405/501One envelope { "error": { "code", "message", "details" } } with stable codes — see Conventions
ListsArrays{ "data": [...] }, paginated with per_page / page
StatusesNumeric{ "code", "key", "label" }
TenancyEvery resource is scoped to the client of the token; other clients’ resources are 404

Endpoint mapping

API v2Client API 2026-09Notes
POST /shipping/ratesPOST /ratesResponse is { "data": [...] }; prices are numbers under price.total / price.breakdown
POST /shipping/createPOST /shipmentsReturns 201 with the full shipment and label.pdf / label.zpl
POST /shipping/deleteDELETE /shipments/{ldv}Addressed by tracking number
GET /shipments, GET /shipments/{ldv}, GET /shipments/{ldv}/labelNew
GET /tracking/{ldv}GET /shipments/{ldv}/trackingNormalized events with ISO timestamps
POST /shippinglist/createPOST /manifestsReturns one manifest per contract with the PDF
POST /pickup/createPOST /pickups
Open stocks listGET /stocks
POST /stock/updatePOST /stocks/{id}/actionsAddressed by stock id, action names instead of numeric codes
Webhooks page/webhooksSame signature; endpoints can now be registered through the API
Carriers catalogueGET /carriersNow returns only the contracts of the client

Field mapping for shipment creation

API v2 (/shipping/create)2026-09 (POST /shipments)
carrierCodecarrierCode (optional consistency check)
contractCodeserviceType
label_formatoptions.labelFormat
packages[].length/width/height/weightpackages[].dimensions{length,width,height,units} + packages[].weight{value,units}
shipFromshipper
shipTorecipient
street1 / street2address.street / address.street2
stateaddress.province
countryaddress.countryCode
notesoptions.notes
contentoptions.contentDescription
insuranceValueoptions.insurance.amount
codValueoptions.cod.amount
cashOnDeliveryModeoptions.cod.method
codTypeoptions.cod.type
accessoriServicesoptions.accessoryServices[] (service ids)
order_idreference
rif_destrecipient.reference
order_totalpackages[].value / customsDetail.customsValue
customsDetail (new, required outside the EU customs territory)
API v2 response2026-09 response
shipmentIdid
trackingNumbertrackingNumber
shipmentCost (string)cost.total (number)
packages[].pack_numberpackages[].number
labelDatalabel.pdf
labelZPLlabel.zpl

Migration checklist

  1. Create an App in Settings → API App and implement the client_credentials token request with caching and renewal on 401.
  2. Replace the base URL and the Authorization header source.
  3. Map the request payloads with the tables above; add explicit units.
  4. Handle the new error envelope: branch on error.code, show error.message, read field errors in error.details.
  5. Add customsDetail for non-EU destinations, or complete the customs defaults of your product catalog in the web interface.
  6. Move status polling to webhooks where possible.
  7. Test against your account, then switch. Keep the v2 code path only until the switch is verified.

Existing webhook endpoints keep working: the tracking.update payload is unchanged apart from the added event and timestamp fields.

Last updated on