Why should you migrate to API v3?
API v3 delivers powerful new capabilities unavailable in v2 to streamline operations, which is especially relevant if you are shipping high volumes or handling complex shipments. A standout improvement is per-parcel customisation for multicollo shipments, allowing you to specify individual weights, dimensions, items, and insurance amounts for each parcel. This removes the API v2 limitation where all parcels in a shipment had to share identical attributes, thereby enhancing accuracy and flexibility. For single-collo shipments, synchronous announcements now return labels instantly within the API response, minimising the risk of rate limiting by combining shipment creation and label retrieval into a single call. This significantly reduces delays caused by multiple API requests to fetch labels. Brand ID is now decoupled from the sender address, enabling more flexible and precise branding management. API v3 allows your entire workflow, from creating orders to printing labels, to be handled programmatically via the API, eliminating the need for manual work in the Sendcloud platform and boosting automation efficiency.Exclusive API v3 Features
- Label notes (
parcel.label_notes): Print SKUs for pick-and-pack efficiency, customer delivery instructions (e.g., βRing the blue doorbellβ), or personalised thank-yous. - SSCC tracking (
parcel.sscc): Monitor pallets or containers across the full supply chain. - Native ZPL labels (
label_detail.mime_type): Direct carrier ZPL output prevents scanning errors common with converted formats. - Delivery scheduling (
delivery_dates.handover_at/deliver_at): Notify carriers of planned handover times (ideal for warehouse pickups) and expected delivery to customers. - Validate a return: Check that return shipment details are correct before label creation.
- Manage shop order statuses and custom status mappings for Prestashop v2 integrations.
- Create, update and delete carrier contracts via the API.
- More pickup carriers supported for scheduling pickups programmatically.
- Create an external parcel for tracking.
- Create proper multicollo shipments: Specify the weight and dimensions of each parcel individually to reflect real world differences, instead of duplicating the first parcelβs details as the previous API required.
Whatβs changed?
Managing orders
In API v3 weβve introduced a dedicated Orders API to simplify order management. In API v2 these functionalities were spread across the Integrations and Parcels APIs, and some functionalities were only available for certified Sendcloud partners.
* This endpoint is only available for certified Sendcloud partners.
Shipping an existing order (creating labels)
The new Ship an Order API in v3 allows you to create a parcel and request a label for an existing order in Sendcloud in one step, both asynchronously and synchronously. In API v2, you could only do this asynchronously.Shipments API v3 vs Ship an Order API v3
The Ship an Order API is specifically designed to create shipments and request labels for existing orders in Sendcloud, in a single step. In contrast, the Shipments API allows you to create a shipment and request a label in a single step without having an existing order in Sendcloud. Note that the Shipments API supports the following features which are not currently available in the Ship an Order API:- synchronous multicollo
- importing order notes
- order split
- shipping rules controls
- label creation when the order doesnβt exist in Sendcloud
- sender address support (dynamic)
- instructions on handling failures stemming from carrier validation errors
Integrations
New in the Integrations API v3, weβve added the ability to manage shop order statuses and custom status mappings for Prestashop v2 integrations. Custom status mappings allow you to define how your shop order statuses correspond to Sendcloudβs internal status categories, enabling more accurate order processing.Parcels/Shipments
In API v2, the Parcels API was used to create shipments and request labels. In API v3, this has been replaced by the Shipments API. You can also refer to the following field changes when migrating from the Parcels API v2 to the Shipments API v3:- Address fields
- Customs fields
- Sender address fields
- Shipment/Parcel fields
- Shipping methods vs. Shipping products vs. Shipping prices vs. Shipping options fields
* Native ZPL labels are only supported for a few selected carriers. As of 1/12/2025: Asendia, Bring, BRT,
Colis PrivΓ©, Colissimo, DHL eCommerce Benelux, DHL Germany, Inpost Poland, Ontime, PLX Parcel Logistics, Trunkrs, UPS
Returns
In API v2, returns were handled via the Parcels API. In API v3, there is a dedicated Returns API to make managing returns easier. Weβve also introduced the possibility to validate return shipments before creating them.Contracts
In the v3 version of the Contracts API, weβve added support for creating, updating, and deleting carrier contracts via the API.Pickups
In the v3 version of the Pickups API, weβve expanded support to include several new carriers that were not available in v2. There have also been some field changes between the Pickups API v2 and Pickups API v3. Please refer to the pickup fields section for more details.Tracking
The Tracking API v2 is replaced with the Parcel tracking API v3, which has an improved response structure, and supports creating external tracking parcels.Dynamic Checkout
The Dynamic Checkout API v2 is replaced with the Dynamic Checkout API v3, which contains references to the Shipments API v3 instead of the Parcels API v2, and can be used with codes from the Shipping options API. Error responses also now comply with the JSON:API standard for error objects.Service Points
Service Points API v3 makes service point discovery more explicit and predictable. Carrier selection must now be stated in the request, address searches return clearer geocoding results, and service point data uses a more structured response schema.Base URL
Service Points API v3 uses the same domain as the other API v3 endpoints:- v2:
https://servicepoints.sendcloud.sc/api/v2 - v3:
https://panel.sendcloud.sc/api/v3
Client-side integrations
Service Points API v2 also supported authentication through theaccess_token parameter. The access token was based on the integration public key and was considered safe to expose, which allowed the API to be called directly from client-side applications such as a service point picker running in a web browser.
This authentication method is not available in v3. Service Points API v3 uses regular API credentials, which are secret and must only be used from a backend.
If your integration currently calls Service Points API v2 directly from a web browser using access_token, you will need to proxy these calls through your backend. The backend can authenticate with Service Points API v3 using one of the supported methods.
Endpoint changes
Changes to service point search
Request parameters
Several query parameters have been renamed, replaced, or removed in API v3.Response structure
Service Points API v3 follows the common v3 response structure. The list endpoint no longer returns a bare array of service points. Results are returned underdata.results, with additional information about address geocoding available under data.geocoding.
The Service point object itself has also been restructured. Related fields are grouped into carrier, address, position, and contact objects. Carrier information now includes the carrier name, logo, and icon in addition to its code.
API v2 response
API v3 response
Carrier selection
Service Points API v3 requires carrier selection to be explicit. A request must either use the carriers enabled in the API integration or specify the carrier codes to search for.
For example, to search using the carriers enabled in the integration:
API v2 - integration carriers
API v3 - integration carriers
API v2 - specific carriers
API v3 - specific carriers
carrier_code in v3 do not need to be enabled in the integration settings.
Address search and geocoding
Both Service Points API v2 and v3 allow you to search for service points near an address. The address is geocoded into geographic coordinates, which are then used as the reference point for the search. In v2,address is used for geocoding, while city, postal_code, and house_number behave differently: they filter service points by exact values stored in the database. This makes them sensitive to spelling and formatting differences and easy to confuse with address-based search.
In v3, these strict filters are removed. In addition to the existing free-text address parameter, the reference address can be provided as separate components:
address_streetaddress_house_numberaddress_postal_codeaddress_city
address_* parameters are used for geocoding and do not filter service point address fields directly. Providing the address as separate components can improve geocoding accuracy by removing ambiguity from a free-text address and giving the geocoding service more structured input.
Geocoding results
v3 also exposes the outcome of address geocoding through data.geocoding. In v2, different geocoding outcomes could result in the same 400 response, making it difficult to tell whether an address was not found, only partially matched, or the geocoding service itself failed.
In v3:
matchedmeans the address was successfully resolved.partially_matchedmeans only part of the supplied address could be resolved. The matched location is still used for the service point search.not_foundmeans the address could not be resolved and no service points are returned.- If the geocoding service is temporarily unavailable, the API returns
503 Service Unavailable.
data.geocoding.precision indicates how precisely the address was matched, while data.geocoding.formatted_address contains the canonical address corresponding to the resolved location.
For example, if a full address can only be resolved to its postal code, the request still succeeds and the search uses that broader location:
Partially matched address
Address not found
Analytics
The Analytics API v2 is replaced with the Analytics API v3 (BETA). Endpoints now live under/analytics/... instead of /insights/..., accept arrays for the carrier, shipping option, and country filters, and shipping methods are replaced by shipping options. Country filters are renamed from_country_code / to_country_code to match other v3 APIs.
Reporting
The Reporting API v2 is replaced with the Reporting API v3, which references shipping options instead of shipping methods, usesfrom_address_* / to_address_* field naming to match other v3 APIs, and returns errors in the JSON:API format.
There have also been some field changes between the Reporting API v2 and Reporting API v3. Please refer to the reporting fields section for more details.
What stayed the same?
Webhooks
There are no changes to webhooks between API v2 and API v3. Additionally, the new Event Subscriptions API (BETA) provides a programmatic alternative for subscribing to parcel events. It supports multiple connection types (webhook, Klaviyo) and configurable authentication, giving you more flexibility than the classic webhook setup.API v2 endpoints that are compatible with API v3
Currently only the Return portal API API v2 endpoint doesnβt yet have an API v3 equivalent, but can still be used together with any API v3 endpoint.Field changes between API v2 and API v3
Shipment/Parcel fields
Address fields
Parcel item fields
Shipping methods vs. Shipping products vs. Shipping prices vs. Shipping options fields
Customs fields
Contracts fields
Pickups fields
Reporting fields
The values you can pass in thefields array and the columns that appear in the CSV have been renamed to match the rest of the v3 APIs.
The
filters object follows the same renames where applicable. announced_after and announced_before are now required.
Dynamic Checkout fields
Service point fields
Notable field changes
is_active β is_expired
is_expired replaces is_active with inverted semantics. In v2, is_active indicated whether the service point data was still considered fresh, rather than whether the service point was operational. The field name was therefore misleading.
In v3, is_expired: true explicitly means that the service point data is stale.
open_upcoming_week β next_open_at
v2 only indicated whether the service point would be open at least once within the next 7 days. v3 instead returns the actual date and time when the service point is expected to open next.formatted_opening_times β opening_times
Opening times have a clearer and stricter structure in v3. Weekday keys change from numbers to names, and opening hours change from formatted time-range strings to{start_time, end_time} objects.
In v2, a closed day is represented as an empty array ([]). In v3, a closed day is always null, while an array always contains at least one opening interval.
API v2 opening times
API v3 opening times