# Get the authenticated user.
Source: https://docs.smartsend.io/api-reference/account/get-the-authenticated-user
/openapi-v1.json get /v1/me
Returns the currently authenticated user along with the websites (teams) the user belongs to.
# Get website info.
Source: https://docs.smartsend.io/api-reference/account/get-website-info
/openapi-v1.json get /v1/website/{team}/info
This endpoint is used to get details about a given website.
# Get specific carrier agent in country.
Source: https://docs.smartsend.io/api-reference/agents/get-specific-carrier-agent-in-country
/openapi-v1.json get /v1/website/{team}/agents/carrier/{carrier}/country/{country}/agentno/{agentNo}
This endpoint is used to get a single agent for a given carrier in a given country by the carriers own agent number.
# List agents within a geospatial area.
Source: https://docs.smartsend.io/api-reference/agents/list-agents-within-a-geospatial-area
/openapi-v1.json get /v1/website/{team}/agents/carrier/{carrier}/country/{country}/area/latitude/min/{minLatitude}/max/{maxLatitude}/longitude/min/{minLongitude}/max/{maxLongitude}
List carrier agents in country limited by a geospatial area.
# List carrier agents in country.
Source: https://docs.smartsend.io/api-reference/agents/list-carrier-agents-in-country
/openapi-v1.json get /v1/website/{team}/agents/carrier/{carrier}/country/{country}
This endpoint is used to index all agents for a given carrier in a given country.
# List carrier agents in postal code.
Source: https://docs.smartsend.io/api-reference/agents/list-carrier-agents-in-postal-code
/openapi-v1.json get /v1/website/{team}/agents/carrier/{carrier}/country/{country}/postalcode/{postalCode}
This endpoint is used to index all agents for a given carrier in a given postal code.
# List carrier agents on given street.
Source: https://docs.smartsend.io/api-reference/agents/list-carrier-agents-on-given-street
/openapi-v1.json get /v1/website/{team}/agents/carrier/{carrier}/country/{country}/postalcode/{postalCode}/street/{street}
This endpoint is used to index all agents for a given carrier on a specific street.
# Authentication
Source: https://docs.smartsend.io/api-reference/authentication
Authenticate with the Smart Send REST API using bearer tokens.
The Smart Send API uses bearer tokens for authentication. Every request must include a valid API token in the `Authorization` header.
## Creating an API token
To create an API token, start by logging into the Smart Send platform .
Go to **API Tokens**.
In the **Create API Token** section, fill in a name. The name is only used for your internal classification and is not visible outside your team.
Click the **Create** button. A modal opens displaying the newly generated API token.
The API token is only shown once. Copy it and store it somewhere safe immediately. If you lose it, you will need to delete it and create a new one.
## Using your API token
Include your API token in the `Authorization` header of every request, prefixed with `Bearer`:
```bash theme={null}
curl https://app.smartsend.io/api/v2/agents/dk \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
```
Treat API tokens like passwords. Never commit them to version control, embed them in client-side code, or share them in support tickets. Use environment variables or a secrets manager to keep them safe.
## Revoking an API token
If a token is no longer needed or may have been exposed, revoke it immediately.
Go to **API Tokens**.
In the **Manage API Tokens** section, find the token you want to delete.
Click the **Delete** button next to the token and confirm the action.
Deleting an API token is irreversible and immediately breaks any integration that is still using it.
# Add shipments to batch
Source: https://docs.smartsend.io/api-reference/booking-batches/add-shipments-to-batch
/openapi-v2beta.json post /beta/teams/{teamUuid}/booking-batches/{batch}/shipments
Validates and adds new shipments to an open booking batch.
# Create a booking batch
Source: https://docs.smartsend.io/api-reference/booking-batches/create-a-booking-batch
/openapi-v2beta.json post /beta/teams/{teamUuid}/booking-batches
Creates an empty booking batch with an optional callback for progress updates.
# Get booking batch
Source: https://docs.smartsend.io/api-reference/booking-batches/get-booking-batch
/openapi-v2beta.json get /beta/teams/{teamUuid}/booking-batches/{batch}
Returns a booking batch's status and progress.
# List booking batches
Source: https://docs.smartsend.io/api-reference/booking-batches/list-booking-batches
/openapi-v2beta.json get /beta/teams/{teamUuid}/booking-batches
Lists the team's booking batches, newest first.
# List shipments in a batch
Source: https://docs.smartsend.io/api-reference/booking-batches/list-shipments-in-a-batch
/openapi-v2beta.json get /beta/teams/{teamUuid}/booking-batches/{batch}/shipments
Lists shipments in a booking batch in the order they were added.
# Combine labels for multiple shipments
Source: https://docs.smartsend.io/api-reference/bookings/combine-labels-for-multiple-shipments
/openapi-v1.json post /v1/website/{team}/shipments/labels/combine
This endpoint is used to combine labels for multiple shipments into one PDF file
# Store a new shipment and book a label
Source: https://docs.smartsend.io/api-reference/bookings/store-a-new-shipment-and-book-a-label
/openapi-v1.json post /v1/website/{team}/shipments/labels
This endpoint is used to create a new shipment and book a label in one request
# List all addons
Source: https://docs.smartsend.io/api-reference/carrier-catalog/list-all-addons
/openapi-v2beta.json get /v2/addons
Lists the global addon catalogue with codes, names and descriptions.
# List all carriers
Source: https://docs.smartsend.io/api-reference/carrier-catalog/list-all-carriers
/openapi-v2beta.json get /v2/carriers
Lists the global carrier catalogue with services, addons and branding.
# List closest agents relative to a given address.
Source: https://docs.smartsend.io/api-reference/closest-agents/list-closest-agents-relative-to-a-given-address
/openapi-v1.json get /v1/website/{team}/agents/closest/carrier/{carrier}/country/{country}/postalcode/{postalCode}/city/{city}/street/{street}
This endpoint is used to list closest agents for a given carrier to an address specified by country, postalcode, city and street.
# List closest agents relative to a given geospatial point.
Source: https://docs.smartsend.io/api-reference/closest-agents/list-closest-agents-relative-to-a-given-geospatial-point
/openapi-v1.json get /v1/website/{team}/agents/closest/carrier/{carrier}/country/{country}/coordinates/latitude/{latitude}/longitude/{longitude}
This endpoint is used to list closest agents for a given carrier to an given geospatial point.
# List closest agents relative to a postal code.
Source: https://docs.smartsend.io/api-reference/closest-agents/list-closest-agents-relative-to-a-postal-code
/openapi-v1.json get /v1/website/{team}/agents/closest/carrier/{carrier}/country/{country}/postalcode/{postalCode}
This endpoint is used to list closest agents for a given carrier to an address specified by country and postalcode.
# List closest agents relative to a postal code and city.
Source: https://docs.smartsend.io/api-reference/closest-agents/list-closest-agents-relative-to-a-postal-code-and-city
/openapi-v1.json get /v1/website/{team}/agents/closest/carrier/{carrier}/country/{country}/postalcode/{postalCode}/city/{city}
This endpoint is used to list closest agents for a given carrier to an address specified by country, postalcode and city.
# List closest agents relative to a postal code and street.
Source: https://docs.smartsend.io/api-reference/closest-agents/list-closest-agents-relative-to-a-postal-code-and-street
/openapi-v1.json get /v1/website/{team}/agents/closest/carrier/{carrier}/country/{country}/postalcode/{postalCode}/street/{street}
This endpoint is used to list closest agents for a given carrier to an address specified by country, postalcode and street.
# Debugging
Source: https://docs.smartsend.io/api-reference/debugging
Use request headers to trace and debug API calls.
When something goes wrong, the fastest path to a fix is being able to pinpoint the exact request that failed. The Smart Send API supports a small set of optional headers that make debugging dramatically easier — both for you and for our support team.
## User-Agent
We recommend including a descriptive `User-Agent` header with every API request. This helps us identify your integration and is invaluable when debugging issues on your behalf.
Follow the `Product/Version (Comments)` pattern established by [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.5.3). Include your application name and version, along with any relevant platform details in the comments.
```bash Example theme={null}
User-Agent: my-shipping-app/1.0.0 (MyPlatform/2.3.1; PHP/8.2)
```
For reference, our own WooCommerce plugin sends the following header:
```bash WooCommerce plugin example theme={null}
User-Agent: smart-send-logistics/8.1.0 (WooCommerce/8.5.0; WordPress/6.4.2; PHP/8.1)
```
Without a descriptive `User-Agent`, your requests appear as anonymous traffic, making it much harder for our support team to trace and resolve issues.
## Request-ID
The `Request-ID` header is the single most useful tool you have for debugging Smart Send API calls. It is an identifier that you set on each request, and the API echoes the same value back in the response `Request-ID` header.
```bash Example theme={null}
Request-ID: order-4521-book-a1b2c3
```
We recommend the following pattern:
Generate a unique identifier on your end before making the request. A UUID works well, but a descriptive key tied to your business logic (for example, an order number combined with the action) is often more useful when you later need to find it in your own logs.
Attach the identifier to the request using the `Request-ID` header. The Smart Send API returns the same value in the response `Request-ID` header, so you can verify it was received correctly.
Include the `Request-ID` in your own application logs alongside any other context about the request. That way, if anything goes wrong, you can look up the call in your logs and forward the `Request-ID` to Smart Send support.
The `Request-ID` is included in our internal logs, so when you contact support about a specific request, providing the `Request-ID` lets us trace it through our systems quickly and pinpoint exactly what happened.
Use any string up to 128 characters containing letters, numbers, dots, hyphens, or underscores.
# Get delivery options
Source: https://docs.smartsend.io/api-reference/delivery-options/get-delivery-options
/openapi-v2beta.json post /v2/teams/{teamUuid}/delivery-options
Finds available services, addons, estimated costs and delivery windows for a shipment.
# Idempotency
Source: https://docs.smartsend.io/api-reference/idempotency
Safely retry API requests without creating duplicate side effects.
Idempotency is a new feature only available in the upcoming API that is currently in beta. The behavior described below is subject to change until the API is released in *General Availability*.
Network errors, timeouts, and other transient failures can leave you uncertain whether a request actually reached Smart Send. Idempotency lets you retry such requests safely, without risk of booking the same shipment twice or creating duplicate resources.
## How idempotency works
Idempotency is opt-in. To enable it, include an `Idempotency-Key` header on a write request:
```bash Example theme={null}
Idempotency-Key: order-4521_9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
```
When the API receives a key it has not seen before, it processes the request normally and stores the response against that key. If you retry the same API request with the **same key and the same payload** within 24 hours, the API returns the stored response instead of running the operation again. The retry is therefore safe: eg. a shipment is booked once, even if you send the request twice.
Requests sent **without** an `Idempotency-Key` header are not deduplicated. Each one is processed independently.
Idempotency applies to write operations (`POST` and `DELETE`). Read operations (`GET`) are already safe to retry, so they ignore the header. When a stored response is replayed, the API includes an `Idempotency-Replayed: true` response header so you can tell a replay apart from a freshly executed request.
## Creating an idempotency key
The key is a string that uniquely identifies a single logical operation. It must meet these requirements:
| Requirement | Value |
| - | - |
| Length | 16–128 characters |
| Allowed characters | Letters, digits, `.`, `_`, `-` |
| Case | Case-sensitive (`ABC` and `abc` are different keys) |
| Scope | Unique per operation, per client |
A random UUID v4 works, but it forces you to generate the key up front and store it alongside the order so you can reuse the exact same value on a retry.
A simpler approach is to **derive the key deterministically** from data you already have, such as the order ID combined with the request payload. Because the same inputs always produce the same key, a retry recomputes the identical key without you having to store anything:
```php PHP theme={null}
// $orderId is your own order reference; $payload is the exact body you will send.
$key = $orderId . '_' . hash('sha256', json_encode($payload));
// $key is your order reference followed by a 64-character hex hash, e.g.
// "order-4521_9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
```
```javascript JavaScript theme={null}
import { createHash } from 'node:crypto';
// orderId is your own order reference; payload is the exact body you will send.
const hash = createHash('sha256').update(JSON.stringify(payload)).digest('hex');
const key = `${orderId}_${hash}`;
```
Send the derived value in the `Idempotency-Key` header. If the request fails and you retry, recompute the key from the same order and payload, and the API recognises it as the same operation.
Including the payload in the key means that a different payload produces a different key, which the API treats as a new operation. If you instead key on a stable identifier alone (for example just the order ID), reusing it with a changed payload is reported as a conflict — see below.
## How repeated requests are handled
| Situation | Result |
| - | - |
| New key | The request is processed normally and the response is stored. |
| Same key, same payload, original finished | The stored response (status code and body) is returned without re-executing the operation. The response includes the header `Idempotency-Replayed: true`. |
| Same key, **different** payload | `422 Unprocessable Entity`. The key is already associated with a different request. |
| Same key, original still in progress | `409 Conflict` with a `Retry-After` header indicating how many seconds to wait before retrying. |
Keys are scoped per client and expire automatically 24 hours after first use. After that, the same key can be used again for a new operation.
A request that fails validation is not stored against the key. You can correct the payload and retry with the same key.
## Conflicts and errors
If you receive a `409 Conflict`, the original request is still being processed. Wait for the number of seconds given in the `Retry-After` response header, then retry with the same key:
```bash Example response theme={null}
HTTP/1.1 409 Conflict
Retry-After: 1
```
A `422 Unprocessable Entity` means the key has already been used for a request with a **different payload** which is considered wrong. Either reuse the original payload, or generate a new key for the new operation.
# Introduction
Source: https://docs.smartsend.io/api-reference/introduction
Learn how to use the Smart Send REST API
Use the Smart Send API to automate every aspect of your shipping workflows, from booking shipments to tracking and returns. The API powers all official Smart Send integrations, so anything our Shopify and WooCommerce apps can do, you can do too.
If you are looking for a ready-made solution for your webshop, explore our e-commerce integrations instead:
## Base URL
All API requests are made against the following base URL:
```bash theme={null}
https://app.smartsend.io/api
```
## OpenAPI specification
The full API is described in machine-readable OpenAPI specifications. Use them to generate client libraries, import the API into tools like Postman, or explore the available endpoints and schemas.
Download the OpenAPI spec for the stable v1 API.
Download the OpenAPI spec for v2 and beta endpoints.
## Integrations
The Smart Send API is the same API that powers our official integrations. If you are building on top of an existing platform, you can often save time by starting from one of our open-source integrations rather than calling the API directly:
## Authentication
The Smart Send API uses bearer tokens for authentication. Generate a token in the Smart Send platform and include it in the `Authorization` header of every request.
Learn how to generate, use, and revoke API tokens.
## Make your first request
Once you have an API token, you can verify your setup with a simple request. The example below lists the carrier agents available in Denmark:
```bash theme={null}
curl https://app.smartsend.io/api/v2/agents/dk \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
```
If your token is valid, the API responds with a JSON payload describing the available carrier agents. From here, you can start exploring the rest of the API.
## Next steps
Generate, rotate, and revoke API tokens.
Use headers like `User-Agent` and `Request-ID` to trace requests.
Browse the API sidebar to see available resources and request schemas.
# Localization
Source: https://docs.smartsend.io/api-reference/localization
Translate customer-facing strings in API responses using the Accept-Language header.
The Smart Send API can return customer-facing strings in several languages. Use the `Accept-Language` header to tell the API which language you prefer, and the API will negotiate the best available match.
## What gets translated
Only strings that are likely to be shown to an end user in a UI are translated. Examples include service display names, addon descriptions, and human-readable status messages.
Identifiers, keys, enum values, and other machine-readable fields are **not** translated. Their values are stable across languages so your integration can rely on them for logic and storage.
For example, a shipping service might be returned as:
```json theme={null}
{
"carrier": "postnord",
"service": "mypack_collect",
"name": "MyPack Collect"
}
```
The `carrier` and `service` keys remain identical regardless of the requested language, while `name` is translated to match the `Accept-Language` header.
## Accept-Language header
Set the `Accept-Language` header on each request to indicate your preferred languages. The header follows [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-accept-language) and supports quality values for ranking preferences.
```bash Example theme={null}
Accept-Language: da-DK, da;q=0.9, en;q=0.5
```
If you do not send an `Accept-Language` header, the API falls back to its default language.
## Language negotiation
The API picks the best available translation by matching your `Accept-Language` preferences against the languages it supports:
1. The most preferred language that the API supports is used.
2. If no preferred language is supported, the API falls back to its default language.
3. If a specific string has not been translated into the negotiated language, the default language is used for that string.
This means you will always receive a usable response, even if your preferred language is not fully supported for every field.
# Get authenticated user
Source: https://docs.smartsend.io/api-reference/me/get-authenticated-user
/openapi-v2beta.json get /v2/me
Returns the authenticated user's profile.
# List available routes
Source: https://docs.smartsend.io/api-reference/routing/list-available-routes
/openapi-v2beta.json get /v2/teams/{teamUuid}/routes
Lists shipping services and addons available through the team's carrier accounts.
# Get closest service points
Source: https://docs.smartsend.io/api-reference/service-points/get-closest-service-points
/openapi-v2beta.json get /v2/teams/{teamUuid}/service-points/closest
Lists the nearest service points to an address, with optional text and bounding-box filters.
# Get service point by code
Source: https://docs.smartsend.io/api-reference/service-points/get-service-point-by-code
/openapi-v2beta.json get /v2/teams/{teamUuid}/service-points/{carrier}/{country}/{code}
Returns a service point by carrier, country and service-point code.
# Get service point by UUID
Source: https://docs.smartsend.io/api-reference/service-points/get-service-point-by-uuid
/openapi-v2beta.json get /v2/teams/{teamUuid}/service-points/{uuid}
Returns a service point by UUID.
# List all service points
Source: https://docs.smartsend.io/api-reference/service-points/list-all-service-points
/openapi-v2beta.json get /v2/teams/{teamUuid}/service-points
Lists service points for a carrier and country, with optional type and bounding-box filters.
# Create and book shipment
Source: https://docs.smartsend.io/api-reference/shipments/create-and-book-shipment
/openapi-v2beta.json post /v2/teams/{teamUuid}/shipments
Validates and books a shipment with the selected carrier service.
# Delete shipment
Source: https://docs.smartsend.io/api-reference/shipments/delete-shipment
/openapi-v2beta.json delete /v2/teams/{teamUuid}/shipments/{shipment}
Deletes a shipment only if it has never been booked, retaining its internal audit history.
# Get a list of a websites shipments
Source: https://docs.smartsend.io/api-reference/shipments/get-a-list-of-a-websites-shipments
/openapi-v1.json get /v1/website/{team}/shipments
This endpoint is used to index a websites shipments or filter/search based on input
# Get a specific shipment
Source: https://docs.smartsend.io/api-reference/shipments/get-a-specific-shipment
/openapi-v1.json get /v1/website/{team}/shipments/{shipment}
This endpoint is used to fetch a specific shipments
# Get shipment
Source: https://docs.smartsend.io/api-reference/shipments/get-shipment
/openapi-v2beta.json get /v2/teams/{teamUuid}/shipments/{shipment}
Returns a shipment with its current booking status, tracking numbers and URLs, documents and codes.
# List shipments
Source: https://docs.smartsend.io/api-reference/shipments/list-shipments
/openapi-v2beta.json get /v2/teams/{teamUuid}/shipments
Lists shipments with filters and cursor pagination for browsing or synchronisation.
# Store a new shipment
Source: https://docs.smartsend.io/api-reference/shipments/store-a-new-shipment
/openapi-v1.json post /v1/website/{team}/shipments
This endpoint is used to create a new shipment
# Void shipment
Source: https://docs.smartsend.io/api-reference/shipments/void-shipment
/openapi-v2beta.json post /v2/teams/{teamUuid}/shipments/{shipment}/cancel
Cancels only booked shipments internally and requests carrier cancellation where supported.
# Get team details
Source: https://docs.smartsend.io/api-reference/teams/get-team-details
/openapi-v2beta.json get /v2/teams/{teamUuid}
Returns details of a team the authenticated user belongs to.
# List all teams
Source: https://docs.smartsend.io/api-reference/teams/list-all-teams
/openapi-v2beta.json get /v2/teams
Lists the teams the authenticated user belongs to.
# List team members
Source: https://docs.smartsend.io/api-reference/teams/list-team-members
/openapi-v2beta.json get /v2/teams/{teamUuid}/members
Lists the members of a team.
# Get tracking information
Source: https://docs.smartsend.io/api-reference/tracking/get-tracking-information
/openapi-v2beta.json get /beta/teams/{teamUuid}/tracking/{trackingNumber}
Returns tracking status and event history for a shipment using its carrier tracking number.
# Read the tracking event feed
Source: https://docs.smartsend.io/api-reference/tracking/read-the-tracking-event-feed
/openapi-v2beta.json get /beta/teams/{teamUuid}/tracking/events
Lists newly published tracking events and delivery estimates for incremental synchronisation.
# Connect agreement
Source: https://docs.smartsend.io/carriers/bifrost/connect
Connect Bifrost Logistics to your Smart Send account.
To use Bifrost with Smart Send, you need an active shipping agreement with Bifrost.
## Connect agreement
To connect Bifrost to Smart Send, contact your Bifrost representative. They will provide us with the necessary details for us to connect your account.
If you have questions or need further assistance, reach out to your Bifrost contact or [Smart Send support](/troubleshooting/support).
## Get agreement
If you do not have an agreement with Bifrost yet, then contact then for prices and terms.
Visit the Bifrost contact page to start your agreement request.
If you prefer, you can also reach out to [Smart Send support](/troubleshooting/support). We are happy to assist you with the process.
# About
Source: https://docs.smartsend.io/carriers/bifrost/introduction
Swedish 3PL specializing in international small parcel express freight.
Bifrost Logistics is a Swedish third-party logistics (3PL) provider specializing in international express freight for small parcels. Bifrost combines truck-based express delivery, cross-border flights, and last mile distribution through the UPU network to serve e-commerce businesses with fast, reliable shipping.
Go to bifrostlogistics.com for more details.
## Company background
Founded in 2016 by Stefan and Samir, Bifrost Logistics draws on over 30 years of experience in cross-border distribution of newspapers, catalogs, and magazines. The company was created to address the needs of a digital, global e-commerce market, with a focus on optimizing delivery chains and improving speed and reliability.
Bifrost started as a freight consultancy for e-commerce retailers expanding internationally. By streamlining logistics, reducing lead times, and providing a free transport administration (TA) system—developed in partnership with Smart Send—Bifrost enabled customers to manage shipments efficiently and cost-effectively.
## Growth and services
Bifrost quickly gained clients such as Hatstore, StickerApp, and the publicly listed Haypp Group. The company’s first 3PL assignment was with Haypp Group, where Bifrost enabled late cut-off times for order picking and packing. This allowed orders to reach most EU countries the morning after packing, ensuring a rapid start to last mile delivery.
Today, Bifrost Logistics is an established 3PL partner for over 20 e-commerce retailers and continues to support freight-only customers with optimized logistics solutions. Bifrost’s trackable express letter service is among the fastest available from any Swedish provider, making it a leading partner for e-commerce distribution focused on speed, precision, and reliability.
## Expertise and innovation
Bifrost’s expertise is built on both long-standing industry experience and a commitment to continuous improvement. By combining technical know-how with deep logistics knowledge, Bifrost helps e-commerce businesses gain a competitive edge in a demanding market.
The company continues to evolve alongside its customers, aiming to stay ahead in the rapidly changing world of e-commerce logistics.
For information about connecting Bifrost to Smart Send, see [Connect Bifrost](/carriers/bifrost/connect).
For details on obtaining a shipping agreement, see [Get a Bifrost agreement](/carriers/bifrost/connect#get-agreement).
# Shipping Services
Source: https://docs.smartsend.io/carriers/bifrost/shipping-services
Bifrost Logistics shipping services and delivery times.
Use Bifrost Logistics to ship small parcels internationally fast, reliable, and trackable — ideal for e-commerce businesses serving Swedish customers. Operating from Sweden, Bifrost specializes in cross-border distribution and partners with the UPU network to provide end-to-end solutions, including some of the fastest air freight options in Europe at competitive prices.
## Shipping Services
Bifrost offers these shipping services:
* **eTailTracked**: Tracked shipments up to 33 × 23 × 3 cm and 2 kg.
* **eTailTracked Large**: Tracked shipments up to 60 cm in length, with a combined height and width (H+W+H) of up to 90 cm, and a maximum weight of 2 kg.
* **Nordic Express Home**: Delivery to the doorstep or mailbox (currently available only in Denmark).
* **Nordic Express Collect**: Delivery to a pickup location (currently available only in Denmark).
## Delivery time
Below is a dataset of the recorded delivery times of a sample of 285.000 random shipments delivered in August 2025.
| Destination | 10-90% delivery time | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | >17 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| AT | **2-3 days** | 0,0% | 0,0% | 68,5% | 95,7% | 98,5% | 99,8% | | | | | | | | | | | | | |
| BE | **1-3 days** | 0,0% | 13,6% | 81,8% | 94,8% | 99,5% | 99,8% | 99,9% | 99,9% | 99,9% | 100,0% | | | | | | | | | |
| CH | **2 days** | 0,0% | 0,6% | 91,2% | 98,5% | 99,5% | 99,8% | 99,9% | 99,9% | 99,9% | 100,0% | | | | | | | | | |
| CZ | **2-4 days** | 0,0% | 0,0% | 64,2% | 89,3% | 95,6% | 99,0% | 99,5% | 100,0% | | | | | | | | | | | |
| DE | **1-2 days** | 8,0% | 67,7% | 93,0% | 97,7% | 98,5% | 99,0% | 99,6% | 99,8% | 99,9% | 99,9% | 100,0% | | | | | | | | |
| EE | **1-2 days** | 1,0% | 36,3% | 98,4% | 99,8% | 100,0% | | | | | | | | | | | | | | |
| ES | **1-4 days** | 3,8% | 17,5% | 46,9% | 78,5% | 91,4% | 95,8% | 97,4% | 98,4% | 98,8% | 99,0% | 99,3% | 99,5% | 99,6% | 99,6% | 99,7% | 99,8% | 99,8% | 99,9% | 100,0% |
| FI | **1-3 days** | 2,4% | 12,6% | 74,6% | 94,6% | 98,6% | 99,2% | 99,3% | 99,4% | 99,5% | 99,8% | 99,9% | 99,9% | 99,9% | 99,9% | 99,9% | 99,9% | 100,0% | | |
| FO | **2-4 days** | 0,6% | 3,4% | 55,3% | 80,8% | 91,0% | 95,4% | 97,0% | 97,9% | 98,1% | 98,7% | 99,0% | 99,1% | 99,1% | 99,1% | 99,1% | 99,3% | 99,3% | 99,4% | 100,0% |
| FR | **3-5 days** | 0,0% | 0,0% | 9,5% | 52,9% | 87,1% | 96,7% | 98,2% | 99,0% | 99,5% | 99,8% | 99,9% | 99,9% | 99,9% | 100,0% | | | | | |
| GB | **1-3 days** | 0,0% | 15,8% | 81,2% | 96,3% | 99,0% | 99,5% | 99,8% | 99,9% | 99,9% | 99,9% | 99,9% | 100,0% | | | | | | | |
| GL | **1-7 days** | 1,2% | 11,2% | 28,7% | 49,7% | 63,4% | 75,0% | 84,7% | 90,3% | 93,6% | 95,6% | 96,5% | 97,2% | 97,4% | 97,8% | 97,9% | 98,3% | 98,3% | 98,8% | 100,0% |
| GR | **2-8 days** | 0,0% | 3,0% | 32,3% | 55,5% | 73,2% | 82,9% | 86,9% | 89,9% | 92,3% | 93,6% | 94,6% | 95,5% | 96,1% | 96,8% | 97,4% | 98,1% | 98,3% | 98,3% | 100,0% |
| HR | **1-6 days** | 0,0% | 19,2% | 49,6% | 70,3% | 84,6% | 89,5% | 92,1% | 94,3% | 95,6% | 97,0% | 97,7% | 97,7% | 98,7% | 98,9% | 99,0% | 99,3% | 99,7% | 99,7% | 100,0% |
| HU | **2-4 days** | 0,0% | 0,0% | 45,1% | 81,9% | 97,3% | 99,3% | 99,3% | 100,0% | | | | | | | | | | | |
| IE | **1-3 days** | 0,0% | 59,4% | 87,8% | 95,9% | 98,7% | 99,3% | 99,5% | 99,7% | 99,7% | 99,7% | 99,8% | 99,8% | 99,9% | 100,0% | | | | | |
| IS | **1-3 days** | 5,1% | 48,5% | 81,9% | 93,1% | 97,9% | 99,3% | 99,5% | 99,6% | 99,7% | 99,7% | 99,9% | 100,0% | | | | | | | |
| IT | **2-4 days** | 0,0% | 0,1% | 36,2% | 81,3% | 96,2% | 98,7% | 99,4% | 99,5% | 99,6% | 99,6% | 99,6% | 99,6% | 99,7% | 99,7% | 99,7% | 99,8% | 99,8% | 99,8% | 100,0% |
| LT | **1-8 days** | 2,4% | 39,1% | 74,2% | 79,4% | 82,0% | 84,9% | 85,0% | 89,7% | 96,5% | 99,7% | 100,0% | | | | | | | | |
| LU | **2-3 days** | 0,0% | 0,0% | 83,2% | 95,8% | 99,7% | 100,0% | | | | | | | | | | | | | |
| LV | **1 day** | 9,1% | 95,6% | 99,7% | 99,9% | 100,0% | | | | | | | | | | | | | | |
| NL | **1-3 days** | 0,0% | 14,5% | 83,2% | 98,2% | 99,8% | 100,0% | | | | | | | | | | | | | |
| NO | **1-3 days** | 0,4% | 12,0% | 57,8% | 94,5% | 98,0% | 99,2% | 99,6% | 99,8% | 99,8% | 99,9% | 99,9% | 100,0% | | | | | | | |
| PL | **3-5 days** | 0,0% | 0,0% | 0,0% | 40,5% | 73,4% | 90,1% | 95,1% | 97,8% | 98,5% | 98,9% | 99,0% | 99,3% | 99,5% | 99,7% | 99,9% | 99,9% | 99,9% | 100,0% | |
| PT | **2-4 days** | 0,0% | 2,8% | 35,9% | 75,6% | 95,9% | 98,5% | 99,0% | 99,3% | 99,4% | 99,6% | 99,6% | 99,7% | 99,7% | 99,7% | 99,7% | 99,7% | 99,7% | 99,7% | 100,0% |
| RO | **3-9 days** | 0,0% | 0,1% | 5,5% | 21,8% | 41,9% | 58,7% | 70,9% | 78,9% | 88,9% | 94,7% | 97,5% | 98,4% | 98,9% | 99,2% | 99,4% | 99,6% | 99,7% | 99,7% | 100,0% |
| SE | **1-3 days** | 0,0% | 42,6% | 89,9% | 97,7% | 99,6% | 99,9% | 99,9% | 100,0% | | | | | | | | | | | |
| SI | **1-3 days** | 8,4% | 29,3% | 78,5% | 97,4% | 99,1% | 99,8% | 100,0% | | | | | | | | | | | | |
| SK | **2-4 days** | 0,0% | 0,0% | 57,4% | 86,9% | 98,2% | 99,0% | 99,5% | 99,5% | 99,7% | 100,0% | | | | | | | | | |
| US | **3-6 days** | 0,0% | 0,5% | 5,0% | 24,5% | 59,8% | 84,1% | 93,7% | 97,0% | 98,3% | 98,9% | 99,1% | 99,3% | 99,5% | 99,6% | 99,7% | 99,8% | 99,8% | 99,8% | 100,0% |
# Connect agreement
Source: https://docs.smartsend.io/carriers/bring/connect
Connect Bring to your Smart Send account.
## Connect agreement
To connect your Smart Send account with Bring, you need an active Bring shipping agreement. When you receive your agreement, you also get access to Bring's platform, **MyBring**. This is the account you will use to connect Bring to Smart Send.
To connect Bring, start by logging into the Smart Send platform .
Go to **Carrier Accounts**
Next to *Bring* click the **Connect** button
Enter the following MyBring details:
* **MyBring username**
* **MyBring password**
* **MyBring API key** (see picture below where to find this)
* **Bring customer number** (see picture below where to find this)
Save the settings
You can find all of the required information by logging in to MyBring and navigating to the API section.
The connection is instant and you should be able to book Bring shipments imidiatly after saving the connection.
## Get agreement
If you do not have an agreement with Bring yet, then contact then for prices and terms.
Contact Bring or signup online
# About
Source: https://docs.smartsend.io/carriers/bring/introduction
Bring is part of Posten Bring Group, offering logistics solutions for corporate customers in the Nordic market and private customers outside Norway.
Bring is part of the Posten Bring Group and serves as their logistics offer to the Nordic market. Bring provides comprehensive parcel, mail, and cargo services across Norway, Sweden, Denmark, Finland, Poland, the Netherlands, and the United Kingdom. The company focuses on flexible, sustainable logistics solutions for corporate customers in the Nordic region and for private customers outside Norway.
Go to bring.com for more details.
## Main markets
Bring operates throughout the Nordic region and Europe, serving Norway, Sweden, Denmark, Finland, Poland, the Netherlands, and the United Kingdom. Their primary focus is on corporate customers in the Nordic market, while private customer solutions are available outside Norway.
## Key services
Bring offers a wide range of logistics services, including:
* Cargo and freight delivery
* Nordic Pickup Point network
* Fulfillment services (*Bring Shelfless*)
* Temperature-controlled logistics for sensitive goods
* Installation services for items such as washing machines and furniture
* Standard parcel and mail delivery
## Service advantages
Bring’s strengths include Nordic expertise and a strong focus on sustainability:
* Comprehensive coverage across the Nordic region and Europe
* Sustainable delivery solutions using biogas, biodiesel, and electric vehicles
* Carbon dioxide-free distribution in city centers
* Flexible logistics for both B2B and B2C customers
* Specialized services such as temperature-controlled and installation logistics
* Commitment to environmental responsibility and sustainable practices
For information about connecting Bring to Smart Send, see [Connect Bring](/carriers/bring/connect).
For details on obtaining a shipping agreement, see [Get a Bring agreement](/carriers/bring/connect#get-agreement).
# Connect agreement
Source: https://docs.smartsend.io/carriers/dao/connect
Connect DAO to your Smart Send account.
## Connect agreement
To connect your Smart Send account with DAO, you need an active DAO shipping agreement. When your agreement is set up, you will receive a welcome email from DAO containing your account details.
To connect DAO, start by logging into the Smart Send platform .
Go to **Carrier Accounts**
Next to *DAO* click the **Connect** button
Enter the following DAO details:
* **Customer number** (usually 4 digits)
* **API key** (alphanumeric string)
* **Profile** (leave empty unless DAO has provided a specific value)
Save the settings
You can find your customer number and API key in your DAO welcome email or agreement confirmation. The "*Profile*" field is rarely used—leave it blank unless DAO has instructed you otherwise.
The connection is instant. You can book DAO shipments immediately after saving the connection.
## Get agreement
If you do not have a DAO agreement yet, contact DAO to request pricing and terms.
Contact DAO for an agreement
## Aggrement conditions
DAO supports two types of agreements:
* **Pickup at your location**: DAO collects parcels directly from your business address.
* **Drop-off at a DAO point**: You deliver parcels to a DAO pickup point.
DAO typically requires a minimum shipping volume for pickups, making this the preferred option for many businesses. However, if your business is located near a DAO pickup point, using drop-off can be a suitable and cost-effective alternative.
# About
Source: https://docs.smartsend.io/carriers/dao/introduction
Danish parcel delivery specialist (Dansk Avis Omdeling) offering fast and affordable services for private consumers.
DAO (*"Dansk Avis Omdeling"* which is Danish for *Danish Newspaper Distribution*) has delivered newspapers across Denmark since 1921 and expanded into parcel distribution in 2011.
Go to dao.as for more details.
## Main markets
DAO operates primarily in Denmark, providing comprehensive coverage across the country with a focus on consumer-friendly delivery solutions.
DAO is part of an international parcel delivery collaboration making it possible to send from DAO to a range of countries using DAO.
## Key services
DAO operates day and night, year-round, to ensure parcels, magazines, letters, and newspapers reach their destinations safely and quickly. The company continually evolves to strengthen Danish distribution, delivering to kiosks, mailboxes, and directly to doors—wherever it suits the recipient.
DAO offers several specialized delivery services designed for different customer needs:
**daoSHOP** – Delivery to parcel shops for convenient pickup.
**daoHOME** – Morning home delivery service for time-sensitive packages.
**daoDIRECT** – Direct-to-door delivery with optional signature confirmation.
## Service advantages
DAO's strength lies in its consumer-focused approach, offering:
* Widespread distribution network across Denmark with numerous parcel shops
* Ability to leave parcels at the doorstep - within the staircase as they have keys to most reseential buildings due to their newspaper distribution history
* Fast delivery due to their early morning delivery
For information about connecting DAO to Smart Send, see [Connect DAO](/carriers/dao/connect).
For details on obtaining a shipping agreement, see [Get a DAO agreement](/carriers/dao/connect#get-agreement).
# Connect agreement
Source: https://docs.smartsend.io/carriers/gls/connect
Connect GLS to your Smart Send account.
## Connect agreement
To connect your Smart Send account with GLS, you need an active GLS shipping agreement. GLS has launched a new IT system called **Click\&Ship** which is meant to replace their older system **YourGLS**.
We currently integrate with YourGLS and all GLS customers can get a YourGLS account for free. This is the account you will use to connect GLS to Smart Send.
To connect GLS, start by logging into the Smart Send platform .
Go to **Carrier Accounts**
Next to *GLS* click the **Connect** button
Enter the following YourGLS details:
* **YourGLS username**
* **YourGLS password**
* **CustomerId** (usually the same as YourGLS username)
* **ContactId** (see instructions below to find this)
Save the settings
## Finding CustomerId and ContactId
To find the CustomerId and ContactId, do the following:
1. Login to YourGLS *here * or by selecting YourGLS in the top right corner from the GLS website (after selecting country if asked)
2. Select **Shipper addresses** from the dropdown menu **Administration** at the top right of the page
3. The **CustomerId** and **ContactId** will be displayed as gray text as the *Shipper number* and the fields are split by a space
The connection is instant and you should be able to book GLS shipments immediately after saving the connection.
## Get agreement
If you do not have an agreement with GLS yet, then contact them for prices and terms.
Contact GLS or signup online
# About
Source: https://docs.smartsend.io/carriers/gls/introduction
European parcel delivery network offering reliable, fast, and cost-effective services across Denmark and wider Europe.
GLS offers reliable, fast, and cost-effective parcel delivery services across Europe. Known for their strong network and predictable delivery times, GLS provides comprehensive logistics solutions for both business and consumer needs.
Go to gls-group.eu for more details.
## Main markets
GLS was originally founded in Germany as German Parcel in 1989 and was later acquired by Royal Mail Group, becoming part of International Distributions Services plc. Today, GLS operates an extensive parcel delivery network across a wide range of countries in Europe and North America, including:
* Andorra
* Austria
* Belgium
* Bulgaria
* Canada
* China
* Croatia
* Cyprus
* Czech Republic
* Denmark
* Estonia
* Finland
* France
* Germany
* Greece
* Hungary
* Ireland
* Italy
* Latvia
* Liechtenstein
* Lithuania
* Luxembourg
* Malta
* Monaco
* Netherlands
* Norway
* Poland
* Portugal
* Romania
* San Marino
* Serbia
* Slovakia
* Slovenia
* Spain
* Sweden
* Switzerland
* United Kingdom
* United States
* Vatican City
GLS provides reliable delivery services and extensive coverage throughout these markets.
## Key services
GLS offers several specialized delivery services designed for different shipping needs:
**BusinessParcel** – standard B2B shipping for business customers
**ShopDeliveryParcel** – delivery to GLS ParcelShops for convenient pickup
**FlexDeliveryService** – provides recipients with flexible delivery options and scheduling
## Service advantages
GLS's strength lies in its European network and service reliability:
* Strong European network with predictable delivery times
* Cost-effective shipping solutions
* Flexible delivery options for recipients
* Comprehensive B2B and B2C services
* Reliable tracking and delivery confirmation
For information about connecting GLS to Smart Send, see [Connect GLS](/carriers/gls/connect).
For details on obtaining a shipping agreement, see [Get a GLS agreement](/carriers/gls/connect#get-agreement).
# Overview
Source: https://docs.smartsend.io/carriers/overview
List of compatible carriers
## What does it mean to connect a carrier?
Connecting a carrier to Smart Send authorizes us to communicate directly with the carrier on your behalf. This connection allows Smart Send to:
* Book shipments using your carrier agreement.
* Track parcels and update shipment statuses.
* Generate shipping labels and required documents.
* Access carrier-specific features and rates.
Your credentials are used securely to enable these features. You remain in control of your carrier agreements and can manage or remove connections at any time in the dashboard.
## Carriers
Smart Send support multipe different carriers. Read more about each carrier, their offerings and how to connect them to your account.
# Connect agreement
Source: https://docs.smartsend.io/carriers/postnord/connect
Connect PostNord to your Smart Send account.
## Connect agreement
To connect your Smart Send account with PostNord, you need an active PostNord shipping agreement. When you receive your agreement, you also get access to PostNord's platform, **Customer Portal** where your account information can be located.
To connect PostNord, start by logging into the Smart Send platform .
Go to **Carrier Accounts**
Next to *PostNord* click the **Connect** button
Select the country of your agreement (PostNord Denmark / PostNord Sweden / ...)
Enter your **Production Customer Number** (not to be confused with the *Customer Number*). See [where to find the Production Customer Number](#finding-your-production-customer-number).
Save the settings
### Finding your production customer number
You can find all of the required information by logging in to PostNord Customer Portal and navigating Company settings -> **Details** and look in the column **Production number**.
The **Productio Customer Number** should not be confused with the *Customer Number*. It can be found in the welcome email you receive after getting an agreement or it can be located at PostNord's Customer Portal.
The format is:
* PostNord Denmark: 9 digits
* PostNord Sweden: 10 digits
* PostNord Finland: 10 digits
* PostNord Norway: 7 digits
## Get agreement
You can create a PostNord business agreement online without needing to contact a sales representative. PostNord does not require a minimum shipping volume—if you send fewer than 200 parcels per month, you will automatically receive their fixed online business prices.
The signup process is fully digital and typically takes less than an hour.
Go to PostNord's online signup page
### Aggrement conditions
PostNord offers several ways to hand over your parcels depending on your agreement with them:
* **Regular pickups**: Schedule recurring pickups from your business address.
* **Ad-hoc pickups**: Request one-time pickups as needed.
* **Drop-off at a service point**: Bring parcels to a PostNord service point or parcel shop.
Choose the option that best fits your shipping workflow. You can manage pickup requests and find nearby drop-off locations in the PostNord Customer Portal .
# Good to know
Source: https://docs.smartsend.io/carriers/postnord/good-to-know
Relevant notes about PostNord when shipping through Smart Send.
## Surcharge fees
### Missing, delayed or incorrect EDI
PostNord charges a surcharge fee called "Missing, delayed or incorrect EDI" when shipment data is not transmitted electronically or is received late or incorrectly.
This fee does **not** affect Smart Send customers. When you book shipments through Smart Send, the EDI data is sent directly to PostNord at the time of booking.
If this fee appears on your PostNord invoice, contact PostNord and ask them to credit it. We have seen this happen for completely new customers that start producing labels just hours after their PostNord account was created.
## Customs fees
### Entry of customs information per parcel
When you provide customs information during booking via Smart Send, PostNord does not charge the "Entry of customs information per parcel" fee. This fee only applies when customs data is missing and PostNord has to enter it manually.
### Export declaration
Similarly, there is no "Export declaration" fee when customs information is provided during booking via Smart Send. By including the required customs details at the time of booking, the export declaration is generated automatically.
# About
Source: https://docs.smartsend.io/carriers/postnord/introduction
Leading Nordic logistics provider offering comprehensive parcel services for both B2C and B2B deliveries across the Nordic region.
PostNord is one of the largest logistics providers in the Nordics, offering a wide range of parcel services for both B2C and B2B deliveries. With extensive coverage across the Nordic region, PostNord provides reliable and comprehensive logistics solutions for businesses and consumers.
See shipping methods for shipping from Denmark.
See shipping methods for shipping from Sweden.
Go to postnord.com for more details.
## Main markets
PostNord was established in 2009 through the merger of the Danish postal service (*Post Danmark A/S*) and the Swedish postal service (*Posten AB*). This merger created a unified logistics and postal provider serving the entire Nordic region, combining decades of experience from both national organizations.
PostNord AB now operates as the main provider of postal and logistics services in Denmark and Sweden, providing a strong logistics coverage throughout the Nordic countries; Denmark, Sweden, Norway, and Finland.
## Key services
PostNord offers several specialized delivery services designed for different customer needs:
* **MyPack Collect** – for pickup point deliveries at convenient locations
* **MyPack Home** – for home delivery to consumers with flexible scheduling
* **Parcel** – for business shipments with reliable B2B delivery solutions
* Many more services and addons
## Service advantages
PostNord's strength lies in its Nordic market leadership and comprehensive service offering:
* Largest logistics provider in the Nordic region
* Extensive coverage across Denmark, Sweden, Norway, and Finland
* Extensive network of pickup points across the Nordic countries and through collaboration in the rest of Europe
* Comprehensive B2B and B2C delivery solutions
* Reliable and established network with proven track record
* Flexible delivery options including home delivery and pickup points
* Strong business focus with specialized B2B services
For information about connecting PostNord to Smart Send, see [Connect PostNord](/carriers/postnord/connect).
For details on obtaining a shipping agreement, see [Get a PostNord agreement](/carriers/postnord/connect#get-agreement).
# Shipping options
Source: https://docs.smartsend.io/carriers/postnord/shipping-options
PostNord parcel services, add-ons, and shipping options for Denmark and Sweden
As of January 1st, 2026, PostNord Denmark has stopped serving letter post in Denmark. Letter post services in Denmark are now handled by DAO going forward.
## General information
When you book a shipment via Smart Send, we send the shipment data electronically to PostNord. This means the shipment is registered in PostNord's systems instantly.
### Overview
| Service | Delivery Area | Recipient Type | Delivery Mode | Max Weight |
| - | - | - | - | - |
| Parcel Locker | DK / Nordic | Private/Business | Pickup | 10–20 kg |
| Service Point | DK / EU | Private/Business | Pickup | 20 kg |
| Home | DK / Intl | Private | Home | Up to 35 kg |
| Parcel | DK / Intl | Business | Address | Up to 35 kg |
| Return | DK | Business | Drop-off | 20 kg |
| Return Pickup | DK | Business | Address | 20 kg |
| Tracked | International | Both | Mailbox/Home | 2 kg |
| Rekommanderet | International | Both | Signature | 2 kg |
## Shipping from Denmark
Package will be delivery to a *PostNord parcel locker* where the recipient collects the parcel.
Parcel lockers require the receiver to use the PostNord mobile app to unlock the parcel locker
* **Destinations**: The Nordic countries
* **Delivery time**: Next-day delivery Monday to Saturday for domestic parcels in Denmark.
* **Notification:** PostNord app, SMS, email
* **Pickup deadline:** 7 days
* **Signature:** No
* **Max weight:** 10 kg (Denmark), 20 kg (Finland)
* **Max dimensions:** 42 × 49 × 60 cm
* **Special requirements:** Requires PostNord app for locker access
* **Redirection:** Parcel is redirected to another pickup point if the locker is full
Package will be delivery to a staffed PostNord Parcel Shop for customer pickup.
* **Destinations**: Many European countries
* **Delivery time**: Next-day delivery Monday to Saturday for domestic parcels in Denmark.
* **Notification:** SMS, email, PostNord app
* **Pickup deadline:** 7 days
* **Signature:** No (unless add-on applied)
* **Max weight:** 20 kg
* **Max dimensions (Denmark/Norway/Sweden/Finland):**
* Max length: 150 cm
* Length + girth: 300 cm
* **Max dimensions (selected EU countries):**
* Max length: 100 cm
* Length + girth: 250 cm
* **Redirection:** Parcel may be redirected to another Service Point if the choosen location is full.
Delivery to a private recipient's home address.
* **Delivery type:** Home delivery
* **Delivery time (Denmark):** Next business day (minimum service level)
* **Notification:** SMS, email, PostNord app
* **Standard delivery:** Mailbox or doorstep
* **Max weight:**
* Denmark/Nordics: 35 kg
* EU/Switzerland/UK: 31.5 kg
* Rest of world: 20 kg
* **Max dimensions:**
* Length: up to 175 cm
* Length + girth: 300 cm
* **Max dimensions (Denmark only, with surcharge):**
* Length up to 220 cm, or
* Length + girth up to 360 cm
* **Failed delivery:** Parcel is redirected to a Service Point
Delivery to a commercial address during daytime.
* **Type**: Business / Private
* **Delivery type:** Business address
* **Delivery time (Denmark):** Next business day (minimum)
* **Signature:** Required by default
* **Notification:** SMS, email, PostNord app
* **Max weight and dimensions:** Same as PostNord Home
* **Important:** If the recipient is identified as a private individual, the shipment may be reclassified as PostNord Home and surcharged.
Return shipment dropped off by the recipient at a Service Point or Parcel Locker.
* **Type**: Business / Private
* **Drop-off:** At Service Point or Parcel Locker
* **Max weight:** 20 kg
* **Notifications:** Recipient and sender
* **Typical use:** Cost effective return option for private parcels.
Return shipment collected at the recipient's address.
* **Pickup:** At recipient address
* **Max weight:** 20 kg
* **Shipments over 20 kg:** Must be delivered to a business hand-in location
* **Notifications:** SMS, email
* **Typical use:** For commercial parcels or private parcels where the receiver is not catable of returning the package from a service point eg. due to heavy content.
Lightweight, trackable international letters and small parcels.
* **Destinations:** International, including Faroe Islands and Greenland
* **Type**: Business / Private
* **Tracking:** Yes
* **Add-ons:** Not supported
* **Delivery time targets (EU):**
* 85% within 3 business days
* 97% within 5 business days
* **Formats:**
* Small: Up to 500 g (some countries allow up to 2 kg)
* Large: Up to 2 kg
* **Max dimensions:**
* Small: 33 × 23 × 1 cm
* Large: Length up to 60 cm, length + width + height ≤ 90 cm
* **Requirements:** EDI including weight
* **Compensation:** No compensation for loss or delay (UPU rules)
Registered international mail with signature and limited compensation.
* **Destinations:** International
* **Type**: Business / Private
* **Max weight:** 2 kg
* **Signature on delivery:** Yes
* **Tracking:** Yes
* **Content restrictions:** Documents and limited cash only
* **Delivery time guarantee:** No
Addons are extra services that can be enabled - often at an extra cost. Availability depends on service and route.
Leave the parcel without requiring a signature.
* **Purpose:** Allow delivery without recipient signature
* **Availability:** Must be specified in EDI booking
* **Risk:** Responsibility transfers upon delivery
Require signature on delivery for confirmation.
* **Purpose:** Proof of delivery with recipient signature
* **Availability:** Specified in EDI booking
* **Use case:** Valuable or important shipments
Additional insurance for high-value items.
* **Purpose:** Extended liability coverage
* **Availability:** Must be booked in EDI
* **Restrictions:** May limit recipient flexibility options
Special handling for large or heavy parcels.
* **Purpose:** Additional handling for parcels exceeding standard dimensions
* **Requirements:** Must be specified when booking
* **Surcharges:** May apply based on dimensions
Transport of dangerous goods in limited quantities.
* **Purpose:** Shipping restricted items in compliance with regulations
* **Requirements:** Must comply with IATA/ADR regulations
* **Declaration:** Required in EDI
The receiver will receive a notification via email/sms and can change delivery information like delivery time window or pickup point.
* **Purpose:** Allow receiver to modify delivery
* **Options:**
* Allow drop-off without signature
* Redirect parcel to a Service Point
* **Availability:** Only if Modtagerflex is not active
* **Not available for:**
* Parcels over 20 kg
* Certain add-ons (e.g., valuables)
As a private receiver then it is possible to signup for *Recipient Flex* (In Danish *ModtagerFlex*) which grants PostNord permission to leave parcels unattended at a greed upon location like the frontdoor or the garage.
The courier takes a photo of the parcel and its placement, which you the receiver can view instantly in the PostNord mobile app (if the user has verified with *MitID*).
## Shipping from Sweden
PostNord Sweden offers similar services to Denmark with some variations in availability and specifications.
Delivery to a PostNord parcel locker where the recipient collects the parcel using the PostNord app.
Parcel lockers require the receiver to use the PostNord mobile app to unlock the parcel locker
* **Delivery type:** Pickup (parcel locker)
* **Notification:** PostNord app, SMS, email
* **Pickup deadline:** 7 days
* **Signature:** No
* **Max weight:** 10 kg
* **Max dimensions:** 42 × 49 × 60 cm
* **Special requirements:** Requires PostNord app for locker access
* **Redirection:** Only if locker is full
Delivery to a staffed PostNord Service Point for customer pickup.
* **Delivery type:** Pickup
* **Notification:** SMS, email, PostNord app
* **Pickup deadline:** 7 days
* **Signature:** No (unless add-on applied)
* **Max weight:** 20 kg
* **Max dimensions:**
* Max length: 150 cm
* Length + girth: 300 cm
* **Note:** Sender must specify preferred pickup location in EDI. Parcel may be redirected if the location is full.
Delivery to a private recipient's address in Sweden.
* **Delivery type:** Home delivery
* **Notification:** SMS, email, PostNord app
* **Standard delivery:** Mailbox or doorstep
* **Max weight:** 35 kg
* **Max dimensions:**
* Length: up to 175 cm
* Length + girth: 300 cm
* **Failed delivery:** Parcel is redirected to a Service Point
Delivery to a business recipient's address.
* **Delivery type:** Business address
* **Signature:** Required by default
* **Notification:** SMS, email, PostNord app
* **Max weight and dimensions:** Same as PostNord Home
* **Important:** If the recipient is identified as a private individual, the shipment may be reclassified as PostNord Home and surcharged.
Return shipment dropped off by the recipient at a Service Point or Parcel Locker.
* **Drop-off:** At Service Point or Parcel Locker
* **Max weight:** 20 kg
Return shipment collected at the recipient's address.
* **Pickup:** At recipient address
* **Max weight:** 20 kg
PostNord Sweden supports the same add-ons as Denmark. Availability depends on service and route.
Leave the parcel without requiring a signature.
Require signature on delivery for confirmation.
Additional insurance for high-value items.
Special handling for large or heavy parcels.
Transport of dangerous goods in limited quantities, in compliance with IATA/ADR regulations.
One-time delivery modification by the receiver, such as changing the delivery time window or pickup point.
As a private receiver it is possible to sign up for *Recipient Flex* (in Danish *ModtagerFlex*), a standing agreement that grants PostNord permission to leave parcels unattended at a predefined location like the front door or the garage.
## Special geographic considerations
### Islands, Faroe Islands, and Greenland
Shipping to remote locations requires special consideration:
* **Delivery frequency:** Not all destinations have daily delivery service
* **Greenland specifics:**
* Parcels may be transported by air if sea transport is unavailable
* Air transport may trigger additional surcharges
* Significantly longer delivery times must be expected
* **Island destinations:** Extended delivery times and potential access limitations
* **Planning:** Allow extra time for deliveries to remote areas
PostNord is the result of the merger between the Swedish postal service (Posten AB) and the Danish postal service (Post Danmark A/S) in 2009. While they operate under one brand, there are significant differences between shipping from Denmark and shipping from Sweden with PostNord.
# Shipping to USA
Source: https://docs.smartsend.io/carriers/postnord/shipping-to-usa
Learn how to ship parcels to the United States using PostNord services and understand the requirements and considerations.
**Service Update**: PostNord temporarily suspended shipments with values below \$800 USD to USA and Puerto Rico from August 23rd to October 23rd, 2025, following the Trump administration's changes to de minimis rules. Service has now resumed with updated customs handling procedures.
PostNord offers shipping services to the United States and Puerto Rico. Due to recent changes in US customs regulations, there are important updates and requirements you need to know about when shipping to these destinations.
## De minimis changes
**De minimis** refers to the threshold value below which imported goods are exempt from customs duties and taxes. Traditionally, shipments to the USA with a value under \$800 USD were exempt from customs duties.
Effective August 29th, 2025, the Trump administration cancelled the de minimis exemption. This means **all shipments to the USA**, including small, low-value items, are now subject to customs duties and taxes.
The only exception is gifts under \$100 USD sent by private customers, which remain exempt from duties.
## Postal Delivered Duties Paid (PDDP)
PostNord has resumed shipping services to the USA and Puerto Rico as of October 23rd, 2025. PostNord offers a **PDDP solution (Postal Delivered Duties Paid)** where customs duties and fees are handled in advance, so there is no extra charges to the receiver.
### Costs and payment
* Customs duties and fees are calculated based on the item's value, country of origin, and tariff code
* A fixed customs clearance fee of \$3 USD applies per package
* Duties and fees are calculated after shipping and appear on your invoice in USD
## Documentation requirements
All shipments to the USA now require comprehensive customs documentation.
Smart Send will automatically create all necessary customs documents during the booking process, ensuring compliance with US customs requirements.
### Required information
The following information must be provided during booking of shipment. If you use one of our integrations then this information will be taken from the order automatically.
* **Item description**; Detailed item descriptions in English
* **Customs invoice**: Required for commercial shipments
* **Country of origin**: Must be clearly stated for all items
* **10-digit HS codes**: Harmonized System tariff codes for all products
* **Values in USD**: All item values must be declared in US dollars
PostNord among the first to resume deliveries to the United States and Puerto Rico for all customers
# Address book
Source: https://docs.smartsend.io/features/address-book
Save and manage delivery addresses for faster shipment creation
The address book stores receiver addresses for reuse when creating shipments.
Addresses can be added manually or saved automatically when booking shipments — see [Settings](/fundamentals/settings) to configure automatic saving.
## View addresses
To view your saved addresses, go to **Address Book** in the Smart Send platform .
## Add an address
To add a new address manually, start by logging into the Smart Send platform .
Go to **Address Book** and click **Create**
Enter the receiver's required information and press **Save**
# Pickup points
Source: https://docs.smartsend.io/features/pickup-points
Start offering shipping to pickup points using Shopify, WooCommerce, or the API.
Offer shipping to pickup points to give your customers a flexible and convenient delivery option.
## How it works
When a customer enters their shipping address at checkout, Smart Send automatically finds the nearest available pickup points and lists them as delivery options. The customer can then select the preferred pickup point which might not be the closest but one they often cross during their daily routines.
We will make sure to keep the database of pickup points up-to-date so you only need to worry about what shipping cost you wanna charge your customers.
## Get started
Choose your integration for details on how to setup pickup point delivery.
## Learn more
Learn how pickup points work and considerations to make.
# Returns
Source: https://docs.smartsend.io/features/return
See your options for creating return labels and handling returns with Smart Send
Use Smart Send to generate return labels for your shipments. You can create a return label and include it in the parcel you send to your customer. You only pay for return labels that are actually used—there is no charge for unused labels.
## How returns work
Just like booking an outgoing shipment, then you can book a return shipment
1. Book a shipment using one of the *return shipping methods*
2. Place the return label inside the parcel before shipping to your customer.
3. If the customer needs to return the item, they attach the label and hand in the parcel at a carrier pickup point.
> The most common return method in e-commerce is for customers to hand in their return parcel at a pickup point. This method is supported by all major carriers.
## Learn more
Best practices, regulations, and advanced return workflows
# Booking
Source: https://docs.smartsend.io/features/shipments/booking
Learn how booking shipments with carriers works and what data is required for successful shipment registration
Booking is the process of digitally registering shipments with carriers to create shipping labels and assign tracking numbers. When you book a shipment, you provide all the necessary information to the carrier so they can process and deliver your package.
## What is booking?
Booking a shipment means registering all the required details with your chosen carrier's system. This digital registration creates an official record of your shipment, assigns tracking numbers, and generates the necessary shipping documents like labels and customs forms.
Once a shipment is booked and the package enters the carrier's network, delivery personnel can scan the parcel and it will be registered correctly in their system, enabling accurate tracking and delivery.
## Required booking data
To successfully book a shipment, you need to provide several categories of information:
### Sender information
Details about where the package is being sent from, including:
* Company name and VAT registration numbers
* Address
* Contact information
This information is stored on the Smart Send account and used for all bookings on a *Team*
### Receiver information
Details about the person/company that should receive the parcel:
* Recipient name
* Delivery address
* Contact information
### Delivery parties
Additional parties involved in the shipping process:
* **Pickup points**: Designated locations where packages can be collected
* **Third-party recipients**: Alternative pickup locations, authorized recipients or importer
* **Return addresses**: Where packages should be sent if delivery fails
### Shipping method and addons
How the package should be delivered:
* **Service type**: Standard, express, economy delivery options, ...
* **Delivery preferences**: Specific time windows, locations it can be left unattended, ...
* **Additional services**: Insurance, signature confirmation, age verification, ...
* **Special handling**: Fragile items, hazardous materials, temperature-controlled, ...
### Physical package details
Information about the actual parcel:
* **Weight**: Package weight in kilograms or pounds
* **Dimensions**: Length, width, height measurements
* **Package type**: Box, envelope, tube, or custom packaging
* **Content description**: Information about the individual items inside the parcel
### Customs information (international shipments)
For cross-border shipments:
* **Item descriptions**: Detailed content information
* **Value declarations**: Monetary value of contents
* **Harmonized codes**: Product classification codes
* **Country of origin**: Where items were manufactured
**Not all data is always required.** The specific information needed depends on the carrier, shipping method, destination, and package contents. Smart Send automatically determines what data is required for each booking.
## What happens after booking?
Once you successfully book a shipment, several things occur automatically:
### Tracking number assignment
Each package receives a unique tracking number that allows you and your customers to monitor the shipment's progress through the carrier's network.
### Document generation
The system creates all necessary shipping documents:
* **Shipping labels**: Address labels with barcodes for package identification
* **Customs documents**: Required forms for international shipments
* **Waybills**: Shipping manifests for carrier processing
* ...
### Carrier notification
The carrier is notified of the new shipment and can begin processing it for pickup and delivery.
## Benefits of Smart Send booking
Smart Send simplifies the booking process by handling the complexity for you:
### Centralized management
All booking logic is maintained centrally in our system, so you don't need to constantly update plugins or modify your webshop system when carriers change their requirements.
### Automatic data validation
Our system validates all booking data before submission to carriers, reducing errors and failed bookings.
### Multi-carrier support
Book shipments with different carriers using the same interface and data structure, making it easy to compare rates and services.
### Integration flexibility
Whether you're using our Shopify app, WooCommerce plugin, or REST API, the booking process works consistently across all platforms.
## Getting started with booking
To start booking shipments, you need:
1. **Carrier connections**: Set up your carrier accounts in Smart Send
2. **Sender information**: Configure your business details
3. **Integration**: Connect your webshop or use our web interface
# Creating shipments
Source: https://docs.smartsend.io/features/shipments/creating
Create shipments manually or via bulk upload in Smart Send
Shipments can be created in Smart Send through several methods depending on your workflow.
## How to create shipments
Create individual shipments directly in the Smart Send platform using the shipment form.
Import orders automatically from your connected webshop (Shopify, WooCommerce, etc.).
Create shipments programmatically using the Smart Send API.
To create a shipment manually, start by logging into the Smart Send platform .
Go to **Shipments** and click **Create**
Enter the receiver information, select a carrier and service, and provide package details
Click **Book** to register the shipment with the carrier and generate a shipping label
# Shipment history
Source: https://docs.smartsend.io/features/shipments/history
Search, filter, and view historical shipments in Smart Send
The shipment list is the central hub for viewing all booked shipments. You can search, filter by date, and review details for any shipment created through Smart Send.
## Search
Use the search bar at the top of the shipment list to find specific shipments. You can search by tracking number, receiver name, or address.
## Filter
Besides searching then shipments can be filtered down to get a more precise overview.
### Date range
Use the date picker to narrow down the shipment list to a specific time period. This is useful for reviewing shipments from a particular day, week, or month.
## Export
Export your shipment data as XLSX or CSV files for reporting, accounting, or further analysis. The export includes all shipment details for the selected time period.
To export shipments, start by logging into the Smart Send platform .
Go to **Shipments**
Click the **Export** button at the top of the shipment list
Select the preferred format and the export will be queued.
Once the export is done then it will be emailed to you.
# Tracking
Source: https://docs.smartsend.io/features/tracking
Centralized, cross-carrier tracking for every shipment booked through Smart Send.
Smart Send tracks every shipment you book, regardless of which carrier delivers it. Tracking numbers are assigned at booking, status updates are collected from the carrier, and the result is shown in one place in the Smart Send platform.
## How tracking works
When you book a shipment, the carrier returns a tracking number that is stored on the shipment in Smart Send. Status updates from the carrier are then associated with that shipment so you can follow its progress without logging in to each carrier separately.
This applies to all carriers Smart Send integrates with, but the update frequency can vary from carrier to carrier.
## The shipment list
You can review tracking information for your shipments in the **Shipments** view in the Smart Send platform . Each shipment shows its tracking number and a link to the carrier's tracking page for real-time details.
## Cross-carrier status
Each carrier reports tracking events in its own format. Smart Send maps every event to one of a shared set of categories so you can see, at a glance, where a shipment is in its journey without learning each carrier's terminology. Each category groups many carrier-specific event types that share the same meaning.
| Category | Meaning |
| - | - |
| `AvailableForPickup` | The parcel is ready to be collected by the recipient. |
| `Change` | The delivery has changed (destination, shipping method, delivery timeslot, etc.). |
| `Delayed` | Delivery has been delayed but the parcel will still be delivered. |
| `Delivered` | The parcel has been delivered. |
| `DeliveryFailure` | Delivery was attempted but did not succeed. |
| `Error` | A technical error occurred, often the inability to fetch tracking information from the carrier. |
| `Exception` | Something out of the ordinary happened. The parcel may be shipped back, the customer contacted, or delivery retried. |
| `Expired` | Tracking information has expired and will no longer receive updates. |
| `Info` | Informational events. |
| `Internal` | Events from Smart Send, not from the carrier (for example scanning, packing, quality control). |
| `InTransit` | The parcel is on its way through the carrier's network. |
| `Notification` | A party was notified by the carrier, typically the recipient. |
| `OutForDelivery` | The parcel is scheduled for delivery. |
| `System` | A system event not intended to be shown to end customers. |
For the authoritative, real-time view of a single shipment, use the carrier tracking link shown on the shipment.
## Customer notifications
For webshops, we recommend including the tracking number and tracking link in your normal order emails and letting the carrier handle delivery notifications. Do not enable Smart Send's own tracking emails on top of this — the carrier will already keep the recipient informed.
The type of notifications a recipient receives varies by carrier and may include phone app notifications, SMS, and email. Smart Send cannot configure which channels each carrier uses.
If you do not have a webshop integration that surfaces tracking, Smart Send can send tracking emails directly to the recipient. To configure them, go to **Notifications** in your team settings.
## Integration-specific tracking
If you use a webshop integration, tracking numbers and links are also written back to the order in your shop so customers can see them in the standard order emails and account pages.
# Account
Source: https://docs.smartsend.io/fundamentals/account
Manage your personal profile, account details, and preferences in Smart Send.
## Update profile
To update your name or email address, start by logging into the Smart Send platform .
Click your name in the bottom left corner and select **Your Profile**
Update your **name** or **email address** in the profile form and click **Save** to apply your changes
## Change password
To change your password, start by logging into the Smart Send platform .
This way of changing password require that you know the **current password** - if you do not know that, instead use the [recover password](#recover-password) guide.
Click your name in the bottom left corner and select **Your Profile**
Select **Password** in the submenu.
Enter your **current password**, then choose a **new password**, confirm it and click **Save** to update your password
## Sessions
View all active sessions for your account. To log out of other devices or browsers, start by logging into the Smart Send platform .
Click your name in the bottom left corner and select **Your Profile**
Select **Sessions** in the submenu to view all active sessions.
Click **Log out other browser sessions** to end all sessions except the current one.
## Preferences
Set your personal preferences to customize your experience. To configure preferences, start by logging into the Smart Send platform .
Click your name in the bottom left corner and select **Your Profile**
Select **Preferences** in the submenu.
Adjust the settings to match your workflow and click **Save** to apply your preferences
Personal preferences only affect your user account. Most configuration is managed at the team level. To update team-wide settings, go to the team settings page.
## Delete account
Deleting your account is permanent and cannot be undone.
Before you can delete your account, you must first cancel subscriptions for all teams you are a member of. To delete your account, start by logging into the Smart Send platform .
Click your name in the bottom left corner and select **Your Profile**
Scroll down to the **Delete Account** section at the bottom of the page and click **Delete Account**.
Enter the current user password and confirm the deletion by clicking **Delete Account** in the confirmation modal.
## Recover password
If you have forgotten your password, you can reset it using the password recovery flow explained below.
If you know the existing password but just wanna change it, then instead use the [Change password](#change-password) guide.
Navigate to the forgot password page that is always available from the login page.
Enter your **email address** and click **Email Password Reset Link**.
Note that the link in the email you receive is only valid for short time, so ideally set the new password once after you receive the email without waiting.
Click the password reset link in the email you receive, then enter and confirm your **new password**.
# Activity log
Source: https://docs.smartsend.io/fundamentals/activities
Track all activities across your account and team
Smart Send logs all relevant activities so you always have full visibility into what happens on your account. Every action is recorded with details about who performed it and when.
## Your activities
Any user can view their own activity log under their profile. To view your personal activities, start by logging into the Smart Send platform .
Go to **Profile**
Select the activity type you want to review.
Security activities include login attempts, password changes, and session management.
Changes track modifications you have made to settings, carrier connections, and other configurations.
History shows your shipment bookings, label creation, and other operational activities.
## Team activities
It is possible to see all relevant activities for a given team across all users on the team, providing full transparency on who did what and when. This is useful for accountability, audit trails, and troubleshooting.
Only Team admins can see team activities across all users.
Go to **Activities**
Select the activity type you want to review.
Security activities for all team members, including login attempts, password changes, and session management.
All changes made by team members to settings, carrier connections, and other configurations.
Complete history of shipment bookings, label creation, and other operational activities across the team.
# Billing
Source: https://docs.smartsend.io/fundamentals/billing
Manage billing and subscription settings
## Trial and plans
We offer both a **free version** and several paid versions of our application. See our pricing page for current plans, their pricing and what features are included in which plan.
**No credit card needed up front** - newly created accounts get a 10-day free trial with no strings attached 👍
### Trial
We provide a 10-day free trial for all new accounts. You can try out our features unlimited without any commitment for 10 days, without even entering your credit card information.
#### What happens when the trial ends?
Once the trial period ends, your account automatically continues on the **free version**. You can always upgrade to a paid plan at any time during the trial period or after it ends. The paid plan starts immediately after choosing it.
#### How do I ensure everything works after my trial ends?
To continue using Smart Send after your 10-day trial ends, simply sign up for one of our subscription plans before the trial period expires. This ensures uninterrupted access to all features and prevents any service disruption.
### Plans
We offer different subscription plans depending on your needs. You can choose to commit either monthly or yearly, with a 40% discount when choosing yearly payment. The plans, features included in each plan, and prices can always be seen on our website.
See our plans and features .
## Subscription status
Your billing page shows the current status of your subscription. Here is what each status looks like:
When no subscription is active, you are on the free version.
During your 10-day trial, you have access to all features.
When you have an active subscription, your current plan and billing period are displayed.
## Create subscription
Check our pricing page for a comparison of the different subscription plans and what features are included in which plans before signing up for a subscription.
Once you have determined the proper subscription plan, start by logging into the Smart Send platform .
Go to **Billing**
Choose whether you want to pay **Monthly** or **Yearly** in the toggle at the top of the page
Locate the plan that is suitable and click the **Subscribe** button
Select the country in the dropdown and click the button **Add VAT number**
Enter the *billing address* and the business VAT number (**must** be prefixed with the country code). Enter the *Business name* in the field **Extra Billing Information**
Click the **Continue To Payment** button, fill out *Payment details* and complete *3D Secure payment* if requested
The yearly payment provides a discount of \~40% compared to paying monthly.
## Manage subscription
If you have an active subscription already, then you can easily change the plan and/or the billing period. That means you can either change a *Monthly Standard* subscription to a *Yearly Standard* subscription or you change a *Standard* subscription to a *Professional* subscription.
To manage your subscription, start by logging into the Smart Send platform .
Go to **Billing** and find the section **Current Subscription Plan**
Click the **Change Subscription Plan** button (also if you just want to change the billing period)
Choose whether you want to pay **Monthly** or **Yearly** in the toggle at the top of the page
Click the **Subscribe** button next to the subscription plan you want to switch to
**Prorating:** When you upgrade or downgrade your plan, you'll only be charged or credited for the price difference between the plans for the remaining billing period.
*Upgrading a plan* takes effect immediately and you will be charged the difference between what you have already paid and what the new subscription package costs.
*Downgrading* is effective immediately and you will be credited for the unused timeframe. The money is not refundable but the credit will be used to pay any future invoices, such as for the next billing period.
## Cancel a subscription
You can easily cancel your subscription in the same place you created it. It is only possible to cancel the subscription through your own login to our webapp. It is not possible to cancel your subscription by contacting our support by mail or phone.
To cancel your subscription, start by logging into the Smart Send platform .
Go to **Billing** and find the section **Cancel Subscription**
Click the **Cancel subscription** button
Canceling your subscription may break existing shipping workflows and affect all team members.
**Grace period:** Your account will continue to have access to all features in your current plan for the remainder of the already paid billing period. When the subscription period ends, your account will not be renewed and will revert to the free version.
## Update billing information
Only team admins can manage billing settings and subscriptions.
Payment details are the details available on invoices and receipts and consists of a billing address and a VAT number.
A European VAT number is prefixed with the two-letter country code without a space. As an example then Smart Send's VAT number is `DK32342892`
Payment details can be entered before signing up for a subscription plan and can also be updated while having an active subscription.
To update payment details, start by logging into the Smart Send platform .
Go to **Billing**
In the section **Payment Information** click the **Update Payment Information** button
Enter the payment information and click the **Update Payment Information** button
## Update payment method
It is possible to add a payment method either before subscribing or when creating a new subscription. It is also possible to update payment information eg. when you get a new credit card.
To update your payment method, start by logging into the Smart Send platform .
Go to **Billing** and find the section **Payment Methods**
Click the **Add Payment Method** button
Fill out the form and click the **Save card** button
Complete *3D secure payment* if requested
Assign the new credit card as the default card by clicking the **Make default** link next to the new credit card
Delete the old payment method by clicking the **Delete** icon next to the old payment method
## Invoices
### Receipt notification
You can provide extra email addresses that will receive a copy of the invoice for each payment.
To configure receipt notifications, start by logging into the Smart Send platform .
Go to **Billing** and find the section **Invoice Email Addresses**
Enter one or more comma-separated email addresses in the field **Email Addresses** and click **Save**
### Downloading historical receipts
To download historical receipts, start by logging into the Smart Send platform .
Go to **Billing** and find the section **Receipts**
Click the **Download** button next to a receipt to download it as a PDF file
## Billed via invoice/EAN
Some teams are not billed through the standard subscription system. Instead, billing is handled externally — either via invoice/EAN or through the Shopify App Store.
If your team is billed externally, the billing page reflects this and you do not need to manage payment methods or subscriptions in Smart Send.
Teams billed via invoice or EAN see their billing managed through an external invoicing system.
Teams using the Shopify app are billed through the Shopify App Store. Subscription management is handled directly in Shopify.
# Carrier Connections
Source: https://docs.smartsend.io/fundamentals/carrier-connections
Autenticate Smart Send to manage shipments
Carrier connections are added to the *Team* allowing all members to use the same carrier agreements and settings.
## What are carrier connections?
Before you can start booking shipments, you need to connect your carrier agreement(s) to Smart Send. By adding your carrier agreement, you authorize Smart Send to book shipping labels on your behalf according to your agreement with the carrier. When a label is booked, a tracking number is assigned and the required shipping documents are created.
Invoicing for the actual shipping cost is handled directly by the carrier according to your agreement with them. Smart Send simply registers the shipment with the carrier on your behalf.
**Need a carrier agreement?** If you don't yet have a carrier agreement, we'll happily assist you with choosing the correct carrier for your needs. [Contact our support team](/troubleshooting/support) for personalized recommendations.
## Managing carrier connections
For details on connecting to a particular carrier, see the carrier-specific guides below:
To update or remove carrier connections, start by logging into the Smart Send platform .
Go to **Settings** → **Carrier Accounts** to manage your connections.
Find the connection you want to modify, then click **Edit** to update credentials or settings, or click **Remove** to delete the connection
Removing a carrier connection affects all team members and may break existing shipping workflows.
# Print setup
Source: https://docs.smartsend.io/fundamentals/print-setup
Configure your printer for shipping labels with Smart Send
Shipping labels generated through Smart Send can be printed on all printers. This guide covers setup for both dedicated label printers and standard A4 printers.
## Recommended setup
We recommend using a [label printer](#label-printers) with the [Smart Send print client](#print-client-setup) configured for the best experience. The optimal label size depends on the carrier you use — read more under [label sizes by carrier](#label-sizes-by-carrier).
A dedicated label printer is a relatively small investment that quickly pays for itself in saved time and materials. If you ship more than a few parcels per week, we strongly recommend getting one.
Clicking the print button and confirming the browser's print dialog is not a big task in itself, but when you process many orders per day, avoiding that step entirely with automatic printing using the [print client](#print-client-setup) is a real timesaver.
### Printer types
Read more on the different printer types below:
A dedicated label printer prints directly onto adhesive labels that you peel off and stick to your parcel. This is the fastest and most convenient option for daily shipping.
A standard A4 printer prints the label on regular paper. You then fold the paper and attach it to your parcel using tape or an adhesive document pouch.
## Buying printer and shipping labels
Smart Send works with any printer and shipping labels. To make it easy, we have listed our suggestions below. For the reasoning behind label materials, quality grades, and warehouse labels, see [Labels](/knowledge/general/labels).
### Label printers
There are many label printers available on the market. We recommend a thermal label printer with at least 203 DPI resolution. Here are our suggestions:
| Printer | Description |
| - | - |
| **Zebra ZD421d** | Our recommended choice. Preferably with WiFi or Ethernet so you can print from multiple computers. |
| **Zebra GK420d** | Older, more affordable version of the ZD421d. |
| **Zebra ZD220** | A budget-friendly yet high-quality option if you don't have the biggest volume. |
### Label sizes by carrier
Choose the right label size based on your carriers:
| Carrier | 102x192mm | 100x150mm |
| - | :-: | :-: |
| **PostNord** | ✓ | |
| **GLS** | ✓ | ✓ |
| **DAO** | ✓ | ✓ |
| **Bring** | ✓ | Some services |
Use the coupon code **SmartSend** to get 10% discount on labels from [billige-fragtlabels.dk](https://www.billige-fragtlabels.dk/produkt/smart-send-luksus-fragtlabels-paa-rulle-102x192-mm).
## Print client setup
The Smart Send print client is a desktop application that connects to your printer and automatically prints shipping labels and documents as they are generated. The print client must be running on a computer connected to the internet and the printer, and can be installed on multiple computers at the same time.
The print client requires a paid plan. See our pricing page for details.
To set up the print client, start by logging into the Smart Send platform .
Go to **Settings** → **Print settings**, download and install the print client for your operating system (Mac or Windows).
Copy the **username** and **password** shown on the *Print settings* page and paste them into the print client login form and then press **Sign in**.
Once connected, select your **default label printer** and **default document printer**. You can use the **Print test** button to verify each printer works correctly.
## Printing manually
If you are not using the print client, you can print shipping labels manually from your browser or a PDF viewer. The setup depends on your printer and the application you are printing from.
### Label printers
When printing on a label printer, then remember to configure the correct paper size in the printer setting (most likely you use labels of sie **102x192mm** or **100x150mm**).
If you are using a Zebra label printer, see the [Zebra printer setup guide](/fundamentals/print-setup/zebra-printer-setup) for instructions on configuring the paper size on Mac and Windows.
### A4 printers
Set the print options to **2 pages per sheet** and **actual size (100% scale)**. This prints the label at the correct dimensions on one half of the A4 page, making it easy to fold and attach to your parcel.
If you add a **copy** of your A4 printer and configure the default settings to 2 pages per sheet, you won't need to set these values on every print.
## Test labels
Download sample labels below to test your printer setup:
PostNord label (102x192mm)
GLS label (102x192mm)
DAO label (102x192mm)
Bring label (102x192mm)
# Zebra printer setup
Source: https://docs.smartsend.io/fundamentals/print-setup/zebra-printer-setup
Configure paper size and label size on Zebra label printers, and read their status lights
Zebra label printers such as the ZD421d, ZD420d, ZD220, and GK420d need to be configured with the correct paper size before printing shipping labels. The paper size should be set to **102x192mm** or **100x150mm** depending on the labels you are using.
## Paper size on your computer
The Zebra label printers are installed on Mac like any other printer. Make sure to select the **Zebra ZPL Label Printer** driver.
To configure the paper size:
1. Open a [test label](/fundamentals/print-setup#test-labels) in the Preview app
2. Select **Print**
3. Under **Paper Size**, select "Manage Custom Sizes..."
4. Press **+** to add a new size
5. Specify the custom paper size:
* Width: **102mm**
* Height: **192mm**
* Non-Printable Area: **User defined**
* Top: **0 mm**, Right: **0 mm**, Bottom: **0 mm**, Left: **0 mm**
6. Double-click the paper size to rename it to "102x192mm"
Once configured, select that printer when printing shipping labels.
All Zebra label printers must be installed on Windows via the Zebra Setup Utilities . The setup process will prompt for the paper size, which should be set to **102x192mm** or **100x150mm**.
Once the printer is configured, select that printer when printing shipping labels.
## Printer models
### Zebra GK420d
If the green status light flashes and nothing prints, the printer is probably paused. Press **Feed** once. The light should turn solid green, and the printer resumes printing.
The GK420d has no display. Everything you can set from the printer runs through the **Feed** button and the green status LED.
With the printer switched on and the top cover closed, press and hold **Feed**. The green LED flashes in sequences — one flash, then two, then three, and so on. Release the button after the sequence you want and before the next one starts.
Releasing after the second flash runs a standard auto media calibration. The printer detects the type and length of the labels you have loaded and adjusts its media sensors to match, feeding one to four labels while it works.
Run it when you load a different label stock, or when the printer skips labels, prints across the gap between labels, or feeds blank labels.
If auto calibration does not get it right, keep holding to the seventh flash instead. That runs a manual media calibration , a more extensive set of tests for stock the automatic routine cannot read.
Releasing after the first flash prints the configuration status label — the printer's current settings, including darkness, print speed and label size. Print one before you change any setting so you have a record of where you started, and again afterwards to confirm the change stuck.
On a GK420d with the internal print server option, the lower half of this label also lists network settings such as the IP address, which is the quickest way to find the address of a printer you cannot reach. Networked models print an additional network configuration label as well.
Releasing after the sixth flash prints a succession of barcode patterns at increasing darkness levels. Press **Feed** once when the pattern is clear and legible, and the printer keeps that darkness.
This is the on-printer alternative to the [Print Quality Assistant](/troubleshooting/print-quality#finding-the-right-settings-on-a-zebra-printer) when you have no computer or phone to hand.
For the full list of sequences, see Zebra's Feed button modes .
Holding **Feed** while you switch the printer **on** is a different mode and enters firmware download. Power the printer up first, then hold **Feed**.
The GK420d has a single status light next to the **Feed** button. Its color and flash pattern tell you what the printer is doing.
| Status light | Meaning | What to do |
| - | - | - |
| Off | The printer has no power. | Check that the printer is switched on and that the power cable is connected at both ends. |
| Solid green | The printer is on and ready. | Nothing. |
| Flashing green | The printer is receiving data. | Wait. The light turns solid green when all data has been received. |
| Double flashing green | The printer is paused. | Press **Feed** to resume printing. |
| Solid amber | The printer failed its power-on self-test, has a memory error, or the printhead needs to cool down. | Switch the printer off and on. If the light stays amber, switch it off for at least five minutes. If it still stays amber, the printer needs service. |
| Flashing amber | The printhead is too hot. | Wait. The printer resumes automatically when the printhead has cooled down. |
| Flashing red | The labels have run out, or the top cover is open. | Load new labels or close the top cover, then press **Feed**. |
| Alternately flashing green and red | The printer needs service. | Contact your Zebra reseller. |
| Flashing red, red, green | The printhead or motor has failed. | Contact your Zebra reseller. |
| Flashing red, amber, green | The printer is defragmenting its memory. | Wait, and do not switch the printer off. |
For details, see Zebra's status light descriptions .
### Zebra ZD420d and ZD421d
If the **PAUSE** indicator lights orange, the printer is paused. Press **PAUSE** once to resume printing.
If the **STATUS** indicator — the leftmost indicator — slowly flashes green, the printer is in sleep mode. Press **PAUSE** once to wake it.
These models use button combinations rather than flash counts. Wait until the printer is ready — the **STATUS** indicator lit solid green — before pressing anything.
With labels loaded and the top cover closed, press and hold **PAUSE** and **CANCEL** together for two seconds, then release. This is SmartCal media calibration: the printer feeds and measures several labels and adjusts its media sensing levels. The **STATUS** indicator returns to solid green when it succeeds.
Run it when you load a different label stock. You do not need to repeat it for another roll of the same stock — a press or two of **FEED** is enough to resynchronise the printer.
See Zebra's instructions for the ZD421 and ZD621 or the ZD420 and ZD620 .
Press and hold **FEED** and **CANCEL** together for two seconds, then release. The printer prints both the printer configuration report and the network configuration report, then returns to ready.
The network report covers the Ethernet, Wi-Fi and Bluetooth settings, so this is the quickest way to read the IP address of a printer you cannot reach from your computer. The printer report gives you the current darkness, speed and label size.
See Zebra's instructions for the ZD421 and ZD621 or the ZD420 and ZD620 .
The print quality report prints a range of test labels at speeds and darkness levels above and below the printer's current settings, so you can pick the best one by eye.
1. Print a configuration report with **FEED** + **CANCEL** so you know the current darkness value.
2. Switch the printer off.
3. Press and hold **FEED** while you switch the printer on. Release **FEED** when the status indicator is the only indicator lit.
4. Find the label that prints best. Bars and spaces should be distinct and the text complete — not so dark that small text fills in, and not so light that the bars lose definition.
5. Add the relative darkness value printed on that label to your current darkness value, and set the result on the printer.
See printing a print quality report .
Printers with the Wi-Fi option can join your wireless network. You set this up from the Zebra Printer Setup Utility app on your phone, which connects to the printer over Bluetooth. Have the network name and password ready before you start.
Open the app and open the printer list. Under **Discovered Printers**, tap your printer. Printers found over Bluetooth show the Bluetooth icon.
On the **Printer Setup** screen, tap **Connectivity Settings**.
Tap **Wireless**.
Turn on **Wireless**. Leave **IP Addressing Protocol** set to **All** and **Power Save Mode** turned off, then tap **Next**.
Leave **Client ID** turned off and tap **Next**.
Enter the name of your wireless network in **ESSID**, exactly as it appears on your other devices. Set **Security Mode** to match your router — most networks use **WPA PSK**. Leave **Wireless Band** set to **All**, then tap **Next**.
On the **WPA Settings** screen, enter your Wi-Fi password and tap **Next**.
Leave **Save settings to file** unchecked and tap **Apply**. The printer does not save the settings until you tap **Apply**.
To confirm the printer is on the network, print a status page with **FEED** + **CANCEL** and check that the network configuration report shows an IP address for Wi-Fi.
These models have five indicator lights above the buttons: **STATUS**, **PAUSE**, **DATA**, **SUPPLIES**, and **NETWORK**. The combination of lit indicators tells you what the printer is doing.
| Indicators | Meaning | What to do |
| - | - | - |
| **STATUS** solid green | The printer is on and ready. | Nothing. |
| **STATUS** slowly flashing green | The printer is in sleep mode. | Press **PAUSE** to wake the printer. |
| **PAUSE** orange | The printer is paused. | Press **PAUSE** to resume printing. |
| **DATA** flashing green | The printer is receiving data. | Wait. |
| **STATUS** red and **SUPPLIES** red | The labels have run out. | Load new labels. |
| **STATUS** red and **PAUSE** orange | The top cover is open. | Close the top cover. |
For the full list, including network indicators, see Zebra's indicator light patterns for the ZD421 and ZD621 or the ZD420 and ZD620 .
Reset the printer when a setting is wrong and you cannot find which one, or when you want to start over with a known configuration. Print a status page with **FEED** + **CANCEL** first so you have a record of the settings you are about to lose.
This resets only the network settings, including Wi-Fi, to their factory defaults. Label size, darkness and other printer settings are kept.
1. Switch the printer off.
2. Press and hold **PAUSE** and **CANCEL** while you switch the printer on.
3. Release the buttons when the **STATUS** indicator is the only indicator lit.
The printer does not print a report afterwards. To use Wi-Fi again, work through **Connect to Wi-Fi** on the **Settings** tab.
See Zebra's instructions for the ZD421 and ZD621 or the ZD420 and ZD620 .
This resets the printer settings, such as label size, darkness and print speed, to their factory defaults. Network settings are kept.
1. Switch the printer off.
2. Press and hold **PAUSE** and **FEED** while you switch the printer on.
3. Release the buttons when the **STATUS** indicator is the only indicator lit.
4. Set the label size again with **PAUSE** + **CANCEL** — see **Set the label size** on the **Settings** tab.
See Zebra's instructions for the ZD421 and ZD621 or the ZD420 and ZD620 .
The **RESET** button sits in a small hole on the underside of the printer. Press it with a paper clip or a similar small object while the printer is switched on. How long you hold it decides what happens.
| Hold for | Result |
| - | - |
| 1 second or less | Nothing. |
| 1 to 5 seconds | Factory reset. The printer resets its settings and prints a printer configuration report. |
| 6 to 10 seconds | Network reset. The printer drops its network connection, resets the network settings to their factory defaults, and prints a printer and a network configuration report. |
| More than 10 seconds | Nothing. The printer leaves reset mode without changing any settings. |
After a factory reset, set the label size again with **PAUSE** + **CANCEL**. After a network reset, connect the printer to Wi-Fi again.
See Zebra's description of the RESET button for the ZD421 and ZD621 or the ZD420 and ZD620 .
Calibrating the label size on the printer is not the same as setting the paper size on your computer. Both need to match your labels, so work through [Paper size on your computer](#paper-size-on-your-computer) above as well.
# Sender Information
Source: https://docs.smartsend.io/fundamentals/sender-information
Configure your company details and address information
## Why is this needed?
Sender information is the company details that identify you as the shipper when creating shipments. This includes your company name, address, and contact details that are used when booking shipments with carriers and appear on shipping labels and tracking pages.
The sender information you provide is primarily used to:
* **Determine correct booking methods** - Different carriers may have specific requirements based on your location and business type
* **Meet carrier requirements** - Most carriers require complete sender information during the booking process
* **Display on shipping materials** - Your information appears on labels, tracking pages, and customer notifications
**Information visibility**: The sender information you enter will likely be visible to shipment recipients. This information can appear in:
* Customer tracking notifications
* Public tracking pages
* Shipping labels attached to packages
* Carrier's internal systems
Some carriers may use their own registry data for sender information on labels. Check your specific carrier's documentation for details about how your information appears.
## Configure sender address
To set up your sender address, start by logging into the Smart Send platform .
Go to **Sender Address**
Enter your company details:
* **Country**
* **VAT Number** - Your business VAT number, if an EU based company then this will be prefixed with the country code eg `DK32342892`
* **Company** - Your business name as it should appear on shipments
* **Address line**
* **Postal code**
* **City**
* **Contact person** - Name of the person handling shipments (you can use "Warehouse" or similar if preferred)
* **Email address** - Email for shipping notifications and communications
Click **Save** to apply your changes
All fields are required for proper shipment booking. If you prefer not to use a specific person's name, you can enter generic terms like "Warehouse," "Shipping Department," or "Customer Service" in the contact person field.
## Customs numbers
For international shipments, you need to provide customs identification numbers that vary by country. These numbers are essential for proper customs clearance and compliance.
Example of customs numbers:
* **EORI number** - European Union registration and identification number
* **EU VAT number** - European Union value-added tax identification number
* **VOEC number** - Norwegian VAT on e-commerce number
* **Country-specific numbers** - Other national customs and tax identification numbers
### Adding customs numbers
To configure customs numbers for international shipping, start by logging into the Smart Send platform .
Go to **Customs**
Select the **country** for which you're adding a customs number
Enter the **customs number** in the provided field
Click **Add** to save the number
You can add multiple customs numbers for different countries. Each number is associated with a specific country and type, allowing you to ship internationally with the correct customs identification.
# Settings
Source: https://docs.smartsend.io/fundamentals/settings
Manage shared team settings that affect all members
You can modify your *personal preferences* under your [account settings](/fundamentals/account), while *team settings* affect all members of the team.
## Preferences
The teams preferences are managed by first logging into the Smart Send platform .
Go to **Settings** → **Preferences**
Set the preferences as you see fit and press **Save**.
### Automatic tracking emails
Enable automatic tracking emails to notify customers when their shipments are booked. When enabled, customers receive an email containing their tracking number and a link to track their package immediately after booking.
Tracking emails are sent immediately after a shipment is successfully booked with the carrier.
### Address book management
Automatically add new receivers to your [address book](/features/address-book) to build a database of customer addresses. This feature is particularly useful when using the manual booking form, as it helps maintain a comprehensive list of shipping destinations.
New receivers are automatically added to your address book when shipments are created through any booking method.
# Team
Source: https://docs.smartsend.io/fundamentals/team
Manage team members settings and resources for perfect collaboration
## What are teams?
A *Team* in Smart Send is a logical grouping where one or more users can access shared resources. *Teams* are what is also sometimes referred to as *Organizations* in other systems - we simply call them *Teams*.
A *Team* provide access to shared resources including:
* **Shipping labels** - All team members can create and manage labels
* **Reports** - Shared access to shipping analytics and performance data
* **Address book** - Common contact and delivery address database
* **Carrier connections** - Shared carrier agreements and settings
The main reason to have multiple users on a team is when multiple people need to access the Smart Send dashboard. All activities are logged on a per-user level, so you can track what each user did and when they did it.
Every Smart Send account requires at least one team, even for individual users. When you create your account, a team is automatically created for you. You can add more team members later or continue using the team as a single-user workspace.
## Manage Team
### Rename Team
To rename your team, start by logging into the Smart Send platform .
Go to **Settings** → **Team Name**
Enter the new name of the team
Click **Save**
The team name change takes effect immediately for all team members.
The team name is only used internally for references and is not shown to shipment receivers in any way. The company information presented to end-customers can be configured under [sender information](/fundamentals/account).
### Team settings
We have an entire page dedicated to configuring the settings for your team. See [Settings](/fundamentals/settings) for details.
### Delete Team
Deleting a team permanently removes the team and all of its resources, including shipping labels, reports, the address book and carrier connections.
Only the team owner can delete a team. Team admins cannot delete the team.
Before you delete the team, download any data or information regarding the team that you wish to retain.
To delete your team, start by logging into the Smart Send platform .
Go to **Settings** → **General** and scroll down to the **Delete Team** section
Click **Delete Team**
Confirm the deletion in the dialog by clicking **Delete Team**
Deleting a team cannot be undone. All resources and data belonging to the team are permanently deleted.
## Roles and permissions
Smart Send offers different role levels to control what team members can access and modify:
| Feature | Admin | Member |
| - | - | - |
| Create and manage shipments | ✅ | ✅ |
| View shipping labels and orders | ✅ | ✅ |
| View team shipping history | ✅ | ✅ |
| Modify team settings | ✅ | ❌ |
| Modify carrier connections | ✅ | ❌ |
| Add and remove team members | ✅ | ❌ |
| Manage billing and subscriptions | ✅ | ❌ |
## Managing team members
### Adding team members
Only team admins can add new members to the team.
To invite new members to your team, start by logging into the Smart Send platform .
Go to **Settings** → **Members** → **Add Team Member**
Fill out the user's **email address** and select the desired **role** for the new team member
Click **Add**
The invited member receives an email with a link to join your team. They must accept the invitation to gain access.
### Removing team members
To remove a member from your team, start by logging into the Smart Send platform .
Go to **Settings** → **Members**
Find the member you want to remove and click the **Remove** button next to their name
Confirm the removal in the dialog by clicking **Remove**.
The member immediately loses access to the team and all associated resources.
Removing a team member cannot be undone. The member will need to be re-invited to regain access.
### Changing member roles
To update a member's role, start by logging into the Smart Send platform .
Go to **Settings** → **Members**
Find the member whose role you want to change
Click **Edit** next to their name
Select the new role from the dropdown
Click **Save changes**
# Webhooks
Source: https://docs.smartsend.io/fundamentals/webhooks
Receive real-time notifications when events occur in Smart Send
Webhooks allow you to receive real-time HTTP POST notifications at your own endpoint when events occur in Smart Send. This is useful for building custom integrations, updating external systems, or triggering automated workflows.
## Create a webhook
To set up a new webhook, start by logging into the Smart Send platform .
Go to **Settings** → **Webhooks**
Enter the **URL** of your endpoint and select the **events** you want to receive notifications for
Click **Create** to save the webhook
## Delete a webhook
To remove a webhook, start by logging into the Smart Send platform .
Go to **Settings** → **Webhooks**
Find the webhook you want to remove and click **Delete** next to it.
Confirm delition by clicking **Delete** in the confirmation modal
Deleting a webhook stops all notifications to that endpoint. Any external systems relying on the webhook will no longer receive updates.
# Introduction
Source: https://docs.smartsend.io/index
Get started with Smart Send—shipping made simple for everyone.
Smart Send makes shipping easy for everyone—no matter your experience or the size of your business. Automate, optimize, and scale your e-commerce deliveries with tools designed to simplify the complex world of shipping.
Currently viewing the documentation in EnglishLæs vores dokumentation på dansk
## Get started quickly
Begin with our Quick start guide to set up Smart Send and start shipping in minutes.
## Integrate with your platform
We believe you should not have to juggle multiple systems to manage your shipping. For most small and medium-sized businesses, working directly from your webshop is the natural choice.
That’s why we provide integrations that let you handle all your shipping tasks entirely within your webshop platform.
Connect using our Shopify AppConnect using our WooCommerce Plugin
## Explore key features
Use Smart Send to streamline every part of your shipping workflow. Learn more about each feature:
Offer flexible delivery to pickup locations.Simplify returns for you and your customers.
## Wanna learn more?
Find in-depth articles about shipping, ecommerce, and best practices in our knowledge base.
Explore detailed guides and articles to deepen your understanding of shipping and ecommerce.
# Rest API
Source: https://docs.smartsend.io/integrations/api
Connect any system to Smart Send using our Rest API.
## Use the Smart Send API
You can use the Smart Send REST API to create shipping labels and manage shipments from any external system. All official Smart Send integrations use this same API, ensuring reliability and consistency across platforms.
The API is suitable for custom integrations, automation, or connecting third-party systems to Smart Send.
See our OpenAPI specification
## Authentication
All requests to the Smart Send API require authentication using an API token. The token must be included in the `Authorization` header as a Bearer token.
### Creating an API Token
To create an API token, start by logging into the Smart Send platform .
Go to **API Tokens**
In the section **Create API Token** fill in a name which is only used for your internal classification
Click the **Create** button which will open a modal displaying the newly generated *API Token*
Note that for security reasons then the API Token is only shown once. You can always delete it and create a new one if need be.
### Revoking an API Token
To revoke an API token, start by logging into the Smart Send platform .
Go to **API Tokens**
In the section **Manage API Tokens** find the API Token you want to delete
Click the **Delete** button next to the API Token you want to delete and confirm the action
Deleting an API Token is irreversible and can break any integrations that is using that API Token.
# Overview
Source: https://docs.smartsend.io/integrations/overview
Smart Send integrations
## Integration options
Use Smart Send integrations to bring shipping and delivery features directly into your webshop. Integrate with your checkout and order pages to provide a seamless experience for your customers, keeping your webshop at the center of the process.
You can connect Smart Send to popular ecommerce platforms or use our REST API to build custom integrations for any system.
# Collaborator access
Source: https://docs.smartsend.io/integrations/shopify/collaborator-access
Grant Smart Send team access to your Shopify store for support and configuration assistance
Collaboration access allows Smart Send support staff to access your Shopify admin to help with app configuration, troubleshooting, and optimization.
## What is collaborator access?
Collaborator access is a secure way to grant temporary access to your Shopify stores Admin without sharing your personal login credentials. When you grant collaborator access, Smart Send team members can:
* **Install the Smart Send App**
* **Configure the Smart Send App**
* **Configure shipping**
* **Configure product information like customs tariff codes**
* **Troubleshoot integration issues**
Collaborator access is **temporary** and can be revoked at any time. Smart Send staff will only access your store when working on your specific support case.
## How to grant Collaborator Access
We can request access to your store once we know your unique myshopify url and have your *Collaborator Request Code*. See below how to get that information which should then be emailed to us.
Once we have this information then we can request a *Collaborator Access* which you then need to accept before we are allowed access to your store.
Learn more about collaborator accounts and codes in the official Shopify documentation.
### Find myshopify url
Go to Settings > Domains in your Shopify admin.
Find the domain ending with `.myshopify.com` in the list and copy the full url.
Provide the myshopify url with us along with the Collaborator Request Code.
### Find the Collaborator Request Code
From your Shopify admin, go to Settings > Users and permissions.
Copy the 4-digit **Collaborator Request Code**
Provide the 4-digit Collaborator Request Code to us.
# Connection
Source: https://docs.smartsend.io/integrations/shopify/connection
Connect your Shopify store to your Smart Send account
After installing the Smart Send app, you need to connect it to your Smart Send account to enable shipping functionality. You can either connect an existing Smart Send account or create a new account.
## Connect to existing account
If you already have a Smart Send account:
1. **Open the Smart Send app** in your Shopify admin
2. **Enter your API token** in the connection form
3. **Click Connect** to link your store
Your API token can be found in your Smart Send account under Settings > API tokens.
## Create new account
If you don't have a Smart Send account yet:
1. **Open the Smart Send app** in your Shopify admin
2. **Select "Create new account"**
3. **Enter your email and password** for the new account
4. **Click Create and Connect**
The password you enter will be used for your new Smart Send account. Make sure to use a strong, unique password.
## Connection interface
The connection screen looks like this:
## Next steps
Once connected, you can:
1. [Configure your shipping methods](/integrations/shopify/shipping-methods)
2. [Set up pickup points](/integrations/shopify/pickup-points) (optional)
3. [Create shipping labels](/integrations/shopify/shipping-labels)
Your Shopify store is now connected to Smart Send and ready for configuration.
# Customs
Source: https://docs.smartsend.io/integrations/shopify/customs
Configure customs information in Shopify
Selling internationally often requires you to provide customs information to the carrier for each shipment.
This page explains how to properly fill out the customs information in Shopify.
The Smart Send Shopify App will make sure to include a product's customs information properly when booking shipments.
Read our detailed article for tips and guidance on customs requirements and best practices.
## Add product customs information
To ensure smooth customs processing, you need to provide standardized customs information for each product. This includes the *Harmonized System (HS) code* and the *country of origin*.
HS codes are internationally recognized numbers that classify traded products. Some countries require country-specific tariff codes, which often extend the standard HS code system.
We recommend adding a general 6-digit HS code to all products and region-specific codes to the destinations where this is required.
### Add general customs information
Follow the steps below for adding general customs information to a product in Shopify or see Shopify's documentation on HS codes for more information.
Go to the **Product** in Shopify Admin or the **Variant** if the product has multiple variants.
Locate the **Shipping** section.
Select the *country of origin* and search for the appropriate *Harmonized System (HS) code*.
### Add region-specific customs information
After adding the *general customs information* click the three dots next to the **Harmonized System (HS) code** field and select **Add HS codes by country/region**.
**USA**: As of August 2025, the United States requires a country-specific HS code following a policy change by the Trump administration.
This means that you should add country-specific tariff codes for the US. These codes are often 10 digits and extend on the HS codes.
# Fulfillments
Source: https://docs.smartsend.io/integrations/shopify/fulfillments
Order fulfilling in Shopify
## Introduction to fulfillments
Fulfillments in Shopify track the process of delivering items from an order to the customer. When you fulfill an order, you confirm that products have been shipped, and Shopify updates the order status accordingly. Fulfillments can be managed manually or automatically, and are essential for keeping customers informed about their order progress.
## One or more fulfillments
Most orders should have just a single fulfillment containing all of the order's items, which are shipped at once in a single physical parcel.
Sometimes however, an order may be split into multiple fulfillments for different reasons which could be:
* Some products are not in stock and the products that are in stock should be shipped now
* All products cannot fit into a single physical package and needs to be split into multiple packages
* Items are stocked at different locations and shipped separately.
## Shipping fulfillments
When booking a shipment, each fulfillment represents a single physical box that needs to be shipped, and each will receive its own tracking number. If you book multiple fulfillments at the same time, they are treated as a shipment with multiple parcels—known as *colli*. This approach is often more cost-effective than booking each fulfillment separately, as carriers may offer discounted rates for multi-parcel shipments.
# Installation
Source: https://docs.smartsend.io/integrations/shopify/installation
Install the Smart Send app from the Shopify App Store
Install the Smart Send app through the Shopify App Store to get started with automated shipping and pickup points.
## Install from Shopify App Store
Go to your Shopify admin .
Click **Apps** in the left sidebar.
Search for "Smart Send" in the marketplace or click here to go directly to our app .
Click **Add app** to begin the installation process.
Review the app permissions and click **Install app** to complete the installation.
## Next steps
Once the app is installed, you'll need to:
1. [Connect to your Smart Send account](/integrations/shopify/connection)
2. [Configure your shipping methods](/integrations/shopify/shipping-methods)
The app is now installed but not yet configured. Continue with the connection setup to link your Shopify store with your Smart Send account.
# Introduction
Source: https://docs.smartsend.io/integrations/shopify/introduction
Connect your Shopify store with Smart Send for automated shipping and pickup points
The Smart Send Shopify app integrates your store with our shipping platform, enabling you to:
* **Show pickup points** directly in your checkout process
* **Create shipping labels** automatically from orders
* **Track shipments** with automatic customer notifications
## How it works
Once installed and configured, the Smart Send app:
1. **Displays pickup points** during checkout (if enabled)
2. **Links your shipping rates** to specific carrier methods
3. **Generates shipping labels** when you fulfill orders
4. **Sends tracking information** to customers automatically
## Prerequisites
Before you begin, ensure you have:
* A Shopify store with admin access
* A Smart Send account (or create one during setup)
* For pickup points: Shopify Advanced plan or higher (required for Carrier Service API)
## Getting started
Follow these steps to set up your Shopify integration:
1. [Install the Smart Send app](/integrations/shopify/installation)
2. [Connect to your Smart Send account](/integrations/shopify/connection)
3. [Configure shipping methods](/integrations/shopify/shipping-methods)
4. [Set up pickup points](/integrations/shopify/pickup-points) (optional)
Install the Smart Send app from the Shopify App Store
Connect your Shopify store to your Smart Send account
Configure how orders map to carrier shipping methods
Enable customers to choose pickup locations during checkout
# Pickup points
Source: https://docs.smartsend.io/integrations/shopify/pickup-points
Enable customers to choose pickup locations during checkout
Pickup points allow customers to select their preferred pickup location during checkout, providing flexibility and convenience for package delivery.
## How pickup points work
Pickup points are presented to the customer during checkout. The plugin will automatically determine the closest pickup points based on the shipping address entered by the customer.
Since each pickup point is a separate shipping method in Shopify then the list should be keep relatively short which is why we currently only show the 5 closest pickup points.
## Requirements
Pickup points require Shopify's **Carrier Service API**, which is only available on certain Shopify plans:
### Shopify plan requirements
| Plan | Carrier Service | Pickup points available |
| - | - | - |
| Basic | ❌ Not included | ❌ No |
| Grow | ✅ Included (⚠️ Only for yearly Shopify subscribers) | ✅ Yes (⚠️ Only for yearly Shopify subscribers) |
| Advanced | ✅ Included | ✅ Yes |
| Plus | ✅ Included | ✅ Yes |
| Development store | ✅ Included | ✅ Yes |
Shopify previously named the **Grow** plan "Shopify". On the **Grow** plan, third-party carrier-calculated shipping — which pickup points rely on — is only included when you're on a **yearly** Shopify subscription. See Shopify's documentation on third-party carrier-calculated shipping for details.
If you don't have Carrier Service activated, you'll see a "Failed to create carrier service" error when trying to enable pickup points.
### Error handling
If you see this error, you need to upgrade your Shopify plan:
Shopify doesn't provide discount information to third-party shipping calculators like Smart Send. The subtotal value excludes any discounts or gift cards applied at checkout.
## Setup pickup points
Once you have Carrier Service activated, follow these steps.
Open the Smart Send app in your Shopify admin
Navigate to **Pickup points** in the top menu
Configure shipping rates based on cart weight and subtotal
Save your configuration
## Configuration options
You can set up different shipping rates for pickup points based on:
* **Cart weight** - Different rates for different weight ranges
* **Order subtotal** - Different rates based on order value
* **Geographic zones** - Different rates for different regions
## Customer experience
When customers reach checkout:
1. They see pickup point options for their selected shipping method
2. They can browse and select from available locations
3. The pickup point information is included in their order
4. They receive confirmation with pickup point details
## Next steps
After setting up pickup points:
1. [Create shipping labels](/integrations/shopify/shipping-labels) for orders with pickup points
2. [Set up tracking notifications](/integrations/shopify/tracking) for customers
# Shipping labels
Source: https://docs.smartsend.io/integrations/shopify/shipping-labels
Create and print shipping labels directly from Shopify orders
Create shipping labels for your orders directly from the Shopify admin interface. The Smart Send app automatically generates labels using the configured shipping methods.
## Create a shipping label
This is how it looks to print shipping labels:
Go to the Shopify order you want to create a label for.
Click the **More actions** button at the top and then select the **Generate label** action.
Print the generated label on your printer.
## How label creation works
The Smart Send app handles label creation intelligently:
### Existing fulfillments
If fulfillments without tracking numbers already exist:
* Creates a shipping label for each fulfillment (as separate colli)
* Uses the existing fulfillment structure
### New fulfillments
If no fulfillments exist:
* Automatically creates a new fulfillment
* Adds all unfulfilled items to the fulfillment
* Generates the shipping label
## Label information
Each shipping label includes:
* **Carrier information** (Bring, PostNord, etc.)
* **Tracking number** for shipment tracking
* **Delivery address** from the order
* **Return address** from your Smart Send settings
* **Package details** (weight, dimensions)
* **Service type** (standard, express, etc.)
## Printing labels
After generating a label:
1. **Review the label preview** in the popup window
2. **Click "Print label"** to open the print dialog
3. **Select your printer** and print settings
4. **Print the label** on standard label paper
Make sure you have the correct label size for your printer. Most carriers accept standard 4x6 inch labels.
## Label management
* **Labels are automatically saved** to your Smart Send account
* **Tracking numbers are added** to the Shopify fulfillment
* **Customers receive tracking notifications** automatically
* **Labels can be re-printed** from your Smart Send dashboard if needed
## Troubleshooting
If you encounter issues creating labels:
1. **Check your shipping method configuration** - ensure rates are properly linked
2. **Verify carrier connection** - make sure your carrier is connected in Smart Send
3. **Check order details** - ensure shipping address is complete and valid
4. **Review fulfillment status** - check if items are properly fulfilled
For more help, see our [troubleshooting guide](/integrations/shopify/troubleshooting).
# Shipping methods
Source: https://docs.smartsend.io/integrations/shopify/shipping-methods
Configure how Shopify shipping rates map to Smart Send carrier methods
Configure your shipping methods to link Shopify shipping rates with specific carrier shipping methods. This ensures the correct shipping method is used when creating labels for orders.
## How shipping methods work
Your Shopify **shipping rates** determine the price customers pay during checkout. When you create a shipping label, Smart Send needs to know which **carrier shipping method** to use for that order.
By linking each Shopify shipping rate to a Smart Send shipping method, the system automatically selects the correct carrier method for each order.
## Add Shopify shipping rates
If you don't have shipping rates set up yet, follow these steps in your Shopify admin .
If you want to enable pickup points for customers during checkout, see [how to set up pickup points](/integrations/shopify/pickup-points) instead.
Click **Manage rates** next to the shipping zone you want to configure.
Click **Add rate**.
Select **Set up your own rates** and configure the settings as needed.
For free shipping, create two rates with different conditions. For example: one rate for orders 0-100 EUR and another for orders 100+ EUR. Learn more about Shopify shipping rates .
## Link shipping methods
After setting up your Shopify shipping rates, you need to link each rate to a Smart Send shipping method.
Open the Smart Send app in your Shopify admin
Navigate to the shipping methods section
For each shipping rate, select the corresponding Smart Send shipping method from the dropdown
## Configuration example
Here's how the linking works:
| Shopify shipping rate | Smart Send shipping method | Result |
| - | - | - |
| Standard shipping (5-7 days) | Bring Standard | Orders with this rate use Bring Standard when creating labels |
| Express shipping (1-2 days) | Bring Express | Orders with this rate use Bring Express when creating labels |
| Free shipping (over 100 EUR) | Bring Standard | Free shipping orders still use Bring Standard method |
## Next steps
After configuring your shipping methods:
1. [Set up pickup points](/integrations/shopify/pickup-points) (optional)
2. [Create your first shipping label](/integrations/shopify/shipping-labels)
# Tracking
Source: https://docs.smartsend.io/integrations/shopify/tracking
Automatic tracking notifications for customers
The Smart Send app automatically adds tracking information to fulfillments and sends notifications to customers when shipping labels are created.
## How tracking works
When you create a shipping label through the Smart Send app:
1. **Tracking number is added** to the Shopify fulfillment
2. **Shopify sends an "Order Shipped" email** to the customer
3. **Email includes tracking number and tracking link**
4. **Customer can track their package** using the provided link
## Customer notifications
Customers receive an automated email that includes:
* **Tracking number** for their shipment
* **Direct tracking link** to the carrier's website
* **Estimated delivery information** (when available)
* **Pickup point details** (if applicable)
### Email example
## Admin notifications
In your Shopify admin, you'll see:
* **"Smart Send sent a Shipping Update email to \[customer]"** message
* **Tracking number displayed** in the fulfillment details
* **Link to carrier tracking** for real-time updates
The email notification is sent by Shopify, not Smart Send. You can customize the email template in your Shopify settings under Settings > Notifications.
## Tracking information sources
Tracking data comes from:
* **Carrier APIs** - Real-time tracking updates
* **Smart Send platform** - Centralized tracking management
* **Shopify integration** - Automatic fulfillment updates
## Customizing notifications
To customize the tracking email template:
1. **Go to Settings > Notifications** in your Shopify admin
2. **Find "Order shipped"** in the customer notifications list
3. **Click "Customize"** to edit the template
4. **Add or modify tracking information** as needed
5. **Save your changes**
## Tracking status updates
The system automatically updates tracking status when:
* **Package is picked up** by the carrier
* **Package is in transit** with location updates
* **Package is out for delivery**
* **Package is delivered** or available for pickup
* **Delivery exceptions** occur (failed delivery, etc.)
## Troubleshooting tracking
If customers aren't receiving tracking notifications:
1. **Check email settings** - ensure customer email is valid
2. **Verify notification settings** - confirm "Order shipped" notifications are enabled
3. **Check spam folders** - tracking emails might be filtered
4. **Review fulfillment status** - ensure tracking number was added correctly
For more help, see our [troubleshooting guide](/integrations/shopify/troubleshooting).
# Troubleshooting
Source: https://docs.smartsend.io/integrations/shopify/troubleshooting
Common issues and solutions for the Smart Send Shopify app
This guide helps you resolve common issues with the Smart Send Shopify integration.
## Connection issues
### App won't connect to Smart Send
**Symptoms:**
* Connection fails when entering API token
* "Invalid credentials" error message
**Solutions:**
1. **Verify your API token** - Check that you're using the correct token from your Smart Send account
2. **Check token permissions** - Ensure the token has the necessary permissions
3. **Try creating a new token** - Generate a fresh API token in your Smart Send settings
4. **Check account status** - Verify your Smart Send account is active
### New account creation fails
**Symptoms:**
* "Failed to create account" error
* Account creation process hangs
**Solutions:**
1. **Check email format** - Ensure you're using a valid email address
2. **Use strong password** - Password must meet security requirements
3. **Try different email** - The email might already be registered
4. **Check internet connection** - Ensure stable connection during setup
## Pickup points issues
### "Failed to create carrier service" error
**Symptoms:**
* Error when trying to enable pickup points
* Carrier service creation fails
**Solutions:**
1. **Check your Shopify plan** - You need Advanced plan or higher
2. **Verify Carrier Service access** - Contact Shopify support if you have Advanced+ plan
3. **Try disabling and re-enabling** - Sometimes a refresh helps
4. **Check app permissions** - Ensure the app has necessary permissions
### Pickup points not showing during checkout
**Symptoms:**
* Customers don't see pickup point options
* Pickup points section is missing
**Solutions:**
1. **Check shipping zone configuration** - Ensure pickup points are enabled for the correct zones
2. **Verify shipping rates** - Pickup points need specific shipping rate configuration
3. **Test with different addresses** - Some areas might not have pickup points available
4. **Check carrier coverage** - Verify the carrier has pickup points in the customer's area
## Shipping label issues
### Can't create shipping labels
**Symptoms:**
* "Print shipping label" option is missing
* Label creation fails with error
**Solutions:**
1. **Check shipping method configuration** - Ensure rates are properly linked to Smart Send methods
2. **Verify carrier connection** - Make sure your carrier is connected in Smart Send
3. **Check order details** - Ensure shipping address is complete and valid
4. **Review fulfillment status** - Check if items are properly fulfilled
### Labels print incorrectly
**Symptoms:**
* Labels are cut off or misformatted
* Print quality is poor
**Solutions:**
1. **Check label size** - Ensure you're using the correct label dimensions (usually 4x6 inches)
2. **Update printer drivers** - Make sure your printer drivers are up to date
3. **Check print settings** - Verify scaling and orientation settings
4. **Try different browser** - Some browsers handle printing differently
## Tracking issues
### Customers not receiving tracking emails
**Symptoms:**
* No tracking notifications sent
* Customers report missing tracking information
**Solutions:**
1. **Check email settings** - Ensure customer email addresses are valid
2. **Verify notification settings** - Confirm "Order shipped" notifications are enabled in Shopify
3. **Check spam folders** - Tracking emails might be filtered
4. **Review email templates** - Ensure tracking information is included in the template
### Tracking numbers not updating
**Symptoms:**
* Tracking shows "Label created" but no updates
* Status doesn't change after pickup
**Solutions:**
1. **Check carrier connection** - Verify the carrier is properly connected
2. **Wait for carrier pickup** - Tracking updates only after the carrier scans the package
3. **Contact carrier support** - Some packages might have tracking issues
4. **Check Smart Send dashboard** - Verify tracking is working in your Smart Send account
## General troubleshooting
### App appears broken or unresponsive
**Solutions:**
1. **Refresh the page** - Simple page refresh often resolves display issues
2. **Clear browser cache** - Clear cookies and cache for your Shopify admin
3. **Try different browser** - Test with Chrome, Firefox, or Safari
4. **Disable browser extensions** - Some extensions can interfere with app functionality
### Performance issues
**Symptoms:**
* App loads slowly
* Actions take a long time to complete
**Solutions:**
1. **Check internet connection** - Ensure stable, fast connection
2. **Close other browser tabs** - Free up system resources
3. **Restart browser** - Clear memory and refresh browser state
4. **Check Shopify status** - Verify Shopify services are running normally
## Getting help
If you continue to experience issues:
1. **Check our status page** - Verify Smart Send services are operational
2. **Contact support** - Reach out to our support team with specific error details
3. **Include error screenshots** - Visual information helps diagnose issues faster
4. **Provide order details** - Include order numbers and specific steps that led to the error
When contacting support, include your Shopify store URL, order numbers (if applicable), and any error messages you're seeing.
# Developer reference
Source: https://docs.smartsend.io/integrations/woocommerce/developers
The Smart Send plugin's hooks, code snippets, metadata and API for customizations and reading WooCommerce order delivery and booking data.
Customize the Smart Send plugin with WordPress filters and actions in your own webshop. Hooks let you adjust checkout, delivery choices and booking behavior without editing the plugin’s code. Use the [metadata reference](#metadata) to understand stored values and the [API](#api) to read pickup points, shipping methods and bookings for a WooCommerce order. Use the [code snippets](#code-snippets) for ready-to-use customizations.
## Filters and actions
Choose the stage that matches your customization. Each stage and hook below links to its detailed contract and example.
| Stage | Purpose | Relevant hooks and filters |
| - | - | - |
| [Checkout availability and rates](#checkout-availability-and-rates) | Control availability, free shipping and additional rates. | [`woocommerce_shipping_smart_send_shipping_is_available`](#woocommerce-shipping-smart-send-shipping-is-available), [`woocommerce_shipping_smart_send_shipping_is_free_shipping`](#woocommerce-shipping-smart-send-shipping-is-free-shipping), [`woocommerce_smart_send_shipping_shipping_add_rate`](#woocommerce-smart-send-shipping-shipping-add-rate) |
| [Pickup points](#pickup-points) | Adjust lookup, ordering, labels and pickup-point timeouts. | [`smart_send_pickup_point_search_params`](#smart-send-pickup-point-search-params), [`smart_send_pickup_point_list`](#smart-send-pickup-point-list), [`smart_send_pickup_point_label`](#smart-send-pickup-point-label), [`smart_send_pickup_point_timeout`](#smart-send-pickup-point-timeout) |
| [Shipping label booking](#shipping-label-booking) | Control shipping methods, colli allocation and weight, order data, booking requests and events. | [`smart_send_fulfillment_shipping_methods`](#smart-send-fulfillment-shipping-methods), [`smart_send_delivery_details`](#smart-send-delivery-details), [`smart_send_parcel_default_weight`](#smart-send-parcel-default-weight), [`smart_send_order_receiver`](#smart-send-order-receiver), [`smart_send_receiver_phone`](#smart-send-receiver-phone), [`smart_send_payload_receiver`](#smart-send-payload-receiver), [`smart_send_payload_items`](#smart-send-payload-items), [`smart_send_payload_totals`](#smart-send-payload-totals), [`smart_send_shipment_freetext`](#smart-send-shipment-freetext), [`smart_send_booking_request`](#smart-send-booking-request), [`smart_send_booking_completed`](#smart-send-booking-completed), [`smart_send_booking_failed`](#smart-send-booking-failed) |
| [Order side effects and final result](#order-side-effects-and-final-result) | Control documents, notes, tracking and status, and read the final result. | [`smart_send_fulfillment_save_documents`](#smart-send-fulfillment-save-documents), [`smart_send_fulfillment_order_note`](#smart-send-fulfillment-order-note), [`smart_send_fulfillment_tracking`](#smart-send-fulfillment-tracking), [`smart_send_fulfillment_order_status`](#smart-send-fulfillment-order-status), [`smart_send_order_fulfilled`](#smart-send-order-fulfilled) |
| [Plugin settings](#plugin-settings) | Adjust the API connection, logging, links and plugin update message. | [`smart_send_api_endpoint`](#smart-send-api-endpoint), [`smart_send_sslverify`](#smart-send-sslverify), [`smart_send_logging`](#smart-send-logging), [`smart_send_configuration_url`](#smart-send-configuration-url), [`smart_send_support_url`](#smart-send-support-url), [`ss_in_plugin_update_message`](#ss-in-plugin-update-message) |
WooCommerce and Subscriptions integration points are listed in the [integration reference](#integration-reference).
`$is_return` is `false` for outbound and `true` for return wherever the signature includes it. A combined booking can run a callback twice, once for each direction. Events with a `Booked_Shipment` instead expose `$shipment->is_return()`.
`smart_send_booking_completed` means Smart Send has created one shipment. It fires before the plugin saves its booking information to the WooCommerce order. Use `smart_send_order_fulfilled` when you need the final order-side result, including an outbound success with a return failure.
Signatures list the filter value first, followed by context arguments; `→` states the required return type. Actions have no useful return value. Examples are independent customizations, not a file to install in full. For complete, ready-to-use customizations, see [Code snippets](#code-snippets).
Open a hook and select **Description** for its contract or **Example** for the PHP customization and usage guidance.
### Checkout availability and rates
**Filter** · `(bool $is_available, array $package, Smart_Send\Shipping_Method\Method $method) → bool`
Runs after the method's shipping-class and customer-role checks. Return `false` to hide this Smart Send instance for the package; return the incoming value to preserve its existing restrictions. Returning `true` does not create a price outside the weight table. Checkout only; no booking or order updates. This example additionally limits the method to Denmark.
```php theme={null}
add_filter( 'woocommerce_shipping_smart_send_shipping_is_available', function ( bool $available, array $package, \Smart_Send\Shipping_Method\Method $method ): bool {
return $available && 'DK' === ( $package['destination']['country'] ?? '' );
}, 10, 3 );
```
**Filter** · `(bool $is_free, array $package, Smart_Send\Shipping_Method\Method $method) → bool`
Runs after the configured minimum/coupon condition is evaluated, when the cart weight is allowed. `true` selects **Flat fee cost**, which is not necessarily zero; `false` uses normal weight-price calculation. It does not override zone, role, class or weight availability. The example disables the flat-fee branch, preserving ordinary rate calculation.
```php theme={null}
add_filter( 'woocommerce_shipping_smart_send_shipping_is_free_shipping', '__return_false' );
```
**Action** · `(Smart_Send\Shipping_Method\Method $method, array $rate) → void`
Runs at the end of a Smart Send rate calculation. `$rate` contains `id`, `label`, `cost`, `meta_data` and `package`. It can run even when weight rules produced no rate, so check `$method->rates` before deriving an extra option. The example adds 10 in the store currency to an existing rate, before WooCommerce tax calculation. It preserves the original service metadata; it does not book a different carrier service.
```php theme={null}
add_action( 'woocommerce_smart_send_shipping_shipping_add_rate', function ( \Smart_Send\Shipping_Method\Method $method, array $rate ): void {
if ( ! isset( $method->rates[ $rate['id'] ] ) ) {
return;
}
$rate['cost'] = (float) $method->rates[ $rate['id'] ]->get_cost() + 10;
$rate['id'] .= ':extra-handling';
$rate['label'] = 'Delivery with extra handling';
$method->add_rate( $rate );
}, 10, 2 );
```
### Pickup points
**Filter** · `(array $params) → array`
Runs before a nearest-point API lookup when a token is configured. Keys: `carrier`, `country`, `postal_code`, `street` (strings) and `city` (string or null). Return all keys. The API determines result count; trim results with `smart_send_pickup_point_list`. Search parameters do not rewrite the customer's order address. This example removes surrounding postal-code whitespace.
```php theme={null}
add_filter( 'smart_send_pickup_point_search_params', function ( array $params ): array {
$params['postal_code'] = trim( $params['postal_code'] );
return $params;
} );
```
**Filter** · `(Smart_Send\Delivery\Pickup_Point[] $points, array $params) → Smart_Send\Delivery\Pickup_Point[]`
Runs after a non-empty API result has become typed points, before session caching/display. Return a reindexed list of compatible `Pickup_Point` objects. The plugin removes objects that do not match the lookup's carrier/country. It does not call this filter for an empty API result. Reordering influences **Select Default** only when no compatible explicit customer choice exists; this is not a way to revoke an existing compatible selection.
This example puts points with a Saturday opening interval first, preserving the existing distance order within each group, then offers at most five. It does not invent or modify pickup addresses. An unknown opening-hours list is treated as not known to be open Saturday.
```php theme={null}
add_filter( 'smart_send_pickup_point_list', function ( array $points, array $params ): array {
$saturday = array();
$other = array();
foreach ( $points as $point ) {
$open_saturday = false;
foreach ( $point->get_opening_hours() as $interval ) {
if ( 'saturday' === $interval['day'] ) {
$open_saturday = true;
break;
}
}
if ( $open_saturday ) {
$saturday[] = $point;
} else {
$other[] = $point;
}
}
return array_slice( array_merge( $saturday, $other ), 0, 5 );
}, 10, 2 );
```
**Expected result:** for nearest-first points A (Monday), B (Saturday), C (Saturday), D (unknown), the order is B, C, A, D. With **Select Default** enabled and no explicit selection, B becomes the default. A compatible point explicitly chosen by the customer remains selected even if it is outside the new top five. The filter is for offering/reordering candidates, not invalidating that choice. Test with a refreshed address because results can be cached in the checkout session.
**Filter** · `(string $label, Smart_Send\Delivery\Pickup_Point $point) → string`
Runs when a pickup label is formatted, after **Dropdown format**. Return plain text, not HTML or pre-escaped entities. Each renderer escapes its output. This affects display, not the point's identity or saved address. Identity is the exact agent number together with carrier and country.
Append the agent number to the existing label in Classic Checkout and Checkout Block. Return unescaped plain text: an ampersand in a company name must remain `&`, not `&`. The renderer handles escaping. The saved point does not change.
```php theme={null}
add_filter( 'smart_send_pickup_point_label', function ( string $label, \Smart_Send\Delivery\Pickup_Point $point ): string {
return $label . ' (#' . $point->get_agent_no() . ')';
}, 10, 2 );
```
**Expected result:** `Corner Shop & Kiosk (#00123)`. Leading zeroes in the agent number are preserved. Verify both checkout types and confirm the selected point on the order.
**Filter** · `(int $seconds) → int|float`
Default: 4 seconds. Runs for both nearest-point and single-point API requests. Return a positive timeout in seconds. Increasing it can lengthen checkout waits; it does not guarantee results. The example allows six seconds.
```php theme={null}
add_filter( 'smart_send_pickup_point_timeout', function ( int $seconds ): int {
return 6;
} );
```
### Shipping label booking
Customize the order-page shipping methods, delivery details, colli allocations and parcel weights, recipient and order data, and the booking request. The hooks below follow the booking flow and include success and failure events. Use [`smart_send_delivery_details`](#smart-send-delivery-details) to change item allocations and [`smart_send_parcel_default_weight`](#smart-send-parcel-default-weight) to adjust calculated parcel weights when booking.
**Filter** · `(array $carriers, WC_Order $order, bool $is_return) → array`
Runs separately for the outbound and return service lists on the order screen. Shape: each carrier has `code`, `name`, `services`; each service has `code`, `name`, `addons` (currently an empty array). A booking method is `carrier_service`, for example `postnord_agent`. Return the filtered carrier list. The resolved selected method is always re-added if missing, even if you return `[]`. This narrows the UI; it is not an authorization boundary. Enforce booking rules in `smart_send_delivery_details`. The example offers only PostNord for outbound, subject to that selected-method safeguard.
```php theme={null}
add_filter( 'smart_send_fulfillment_shipping_methods', function ( array $carriers, \WC_Order $order, bool $is_return ): array {
if ( $is_return ) {
return $carriers;
}
return array_values( array_filter( $carriers, function ( array $carrier ): bool {
return 'postnord' === $carrier['code'];
} ) );
}, 10, 3 );
```
**Filter** · `(Smart_Send\Delivery\Delivery_Details $details, WC_Order $order, bool $is_return) → Smart_Send\Delivery\Delivery_Details`
Runs once per attempted direction after stored configuration, resolved service and submitted overrides are merged, before pickup validation and booking. Return the details object. Use `set_shipping_method()`, `set_pickup_point()` or `set_parcel_plan()`; use `clear_pickup_point()` for an explicit clear in a partial details object. Throw `Smart_Send\Booking\Exceptions\Booking_Exception` to reject a business rule before booking. Filter changes affect this booking; they are not automatically persisted. See [delivery details and persistence](#delivery-details-and-persistence).
This narrowly scoped example splits an outbound order with exactly one line and three whole units into two colli: 2 + 1. It leaves return bookings and any existing or submitted parcel plan unchanged. Adapt the matching rule to the products and packing process you actually use before enabling it.
The IDs passed to `add_item()` are **WooCommerce order-item IDs**, not product or variation IDs. Measurements below are in centimeters. Weight remains automatic; the [packaging-weight example](#smart-send-parcel-default-weight) can therefore apply to each colli.
```php theme={null}
add_filter( 'smart_send_delivery_details', function ( \Smart_Send\Delivery\Delivery_Details $details, \WC_Order $order, bool $is_return ): \Smart_Send\Delivery\Delivery_Details {
if ( $is_return || null !== $details->get_parcel_plan() ) {
return $details;
}
$items = array_values( $order->get_items() );
if ( 1 !== count( $items ) || 3.0 !== (float) $items[0]->get_quantity() ) {
return $details;
}
$item = $items[0];
$first = new \Smart_Send\Delivery\Parcel_Spec();
$first->add_item( $item->get_id(), 2, $item->get_name() )
->set_length( 30 )->set_width( 20 )->set_height( 15 );
$second = new \Smart_Send\Delivery\Parcel_Spec();
$second->add_item( $item->get_id(), 1, $item->get_name() )
->set_length( 30 )->set_width( 20 )->set_height( 10 );
$plan = new \Smart_Send\Delivery\Parcel_Plan();
$plan->add_spec( $first )->add_spec( $second );
return $details->set_parcel_plan( $plan );
}, 10, 3 );
```
**Expected result:** an order line with ID 701 and quantity 3 becomes allocations `(701, 2)` and `(701, 1)`. All three units are allocated once. For a 0.50 kg product and 0.20 kg packaging per colli, the weights are 1.20 kg and 0.70 kg. Missing product weight still needs correction or an explicit parcel weight. The generated plan controls this booking; filter output is not automatically saved as the order's parcel configuration. See [Colli shipments](/integrations/woocommerce/shipping-labels#colli-shipments) for the merchant workflow.
**Filter** · `(float $weight, Smart_Send\Delivery\Parcel_Spec $spec, WC_Order $order) → float`
Runs **when booking** each parcel without an explicit weight. Input is the combined product weight of the items and quantities allocated to that parcel, in **kg**, possibly zero. The filter changes the booking’s parcel weight; it does not change item allocations, the calculated weight displayed on the order page, or the saved parcel plan. Return a finite usable weight including packaging. An explicit `Parcel_Spec::set_weight()` or order-screen weight bypasses the filter. An allocated deleted product with unknown weight produces a validation error before the filter; provide an explicit positive parcel weight instead. There is no direction argument; the filter can run for outbound and return.
Add 0.20 kg of packaging to each parcel whose weight is computed from its items. The filter uses kilograms regardless of the shop's catalog weight unit. It can run for both outbound and return parcels.
```php theme={null}
add_filter( 'smart_send_parcel_default_weight', function ( float $weight, \Smart_Send\Delivery\Parcel_Spec $spec, \WC_Order $order ): float {
return $weight + 0.20;
}, 10, 3 );
```
**Expected result:** items totaling 1.50 kg are booked with a parcel weight of 1.70 kg. The calculated order-page display remains 1.50 kg. An explicitly entered parcel weight of 2.00 kg stays 2.00 kg; it already represents the total including packaging. A deleted product with unknown weight still requires an explicit positive parcel weight. This filter does not change checkout weight-band prices or saved product weights.
**Filter** · `(array $shipping_address, int $order_id) → array`
Runs when reading the order's shipping address, before phone/email fallback and conversion to receiver data. Uses WooCommerce address keys such as `first_name`, `last_name`, `company`, `address_1`, `address_2`, `postcode`, `city`, `country`, and optional `phone`/`email`. Return the complete address. The second argument is the order ID, not a `WC_Order`. Both directions use the same reading stage; this filter does not save the address.
```php theme={null}
add_filter( 'smart_send_order_receiver', function ( array $address, int $order_id ): array {
$address['country'] = strtoupper( $address['country'] );
return $address;
}, 10, 2 );
```
**Filter** · `(string|null $phone, WC_Order $order) → string|null`
Runs after choosing shipping phone, or billing phone when shipping and billing countries match, then trimming whitespace. Return a phone number or `null`. No direction flag is supplied. The example removes spaces without guessing a country calling code.
```php theme={null}
add_filter( 'smart_send_receiver_phone', function ( ?string $phone, \WC_Order $order ): ?string {
return null === $phone ? null : preg_replace( '/\s+/', '', $phone );
}, 10, 2 );
```
**Filter** · `(array $receiver, WC_Order $order) → array`
Runs after receiver mapping and phone/email fallback. Keys: `company`, `name_line1`, `name_line2`, `address_line1`, `address_line2`, `postal_code`, `city`, `country` (strings), `phone` and `email` (string or null). Return all keys. This is plugin-level data, not a raw HTTP payload, and it is used in either direction. The example removes accidental whitespace around a non-null email.
```php theme={null}
add_filter( 'smart_send_payload_receiver', function ( array $receiver, \WC_Order $order ): array {
if ( null !== $receiver['email'] ) {
$receiver['email'] = trim( $receiver['email'] );
}
return $receiver;
}, 10, 2 );
```
**Filter** · `(array[] $items, WC_Order $order) → array[]`
Runs after reading one row per order line, before allocation to parcels, in either direction. Return the same identities and valid quantities; use `smart_send_delivery_details` to distribute them. See the [item row schema](#item-rows). Net/tax values are discounted **line totals**, not unit prices. The example trims a customs description without fabricating one for a deleted product.
```php theme={null}
add_filter( 'smart_send_payload_items', function ( array $items, \WC_Order $order ): array {
foreach ( $items as &$item ) {
if ( is_string( $item['description'] ) ) {
$item['description'] = trim( $item['description'] );
}
}
unset( $item );
return $items;
}, 10, 2 );
```
**Filter** · `(array $totals, WC_Order $order) → array`
Runs after order totals have been derived and negative net/tax values clamped to zero. Return all keys in the [totals schema](#totals). Later values are used as returned; preserve reconciliation and non-negative amounts. Order-level fees are included in shipment totals, whereas parcel totals contain allocated merchandise. The example logs only the currency and order total, leaving the booking values unchanged.
```php theme={null}
add_filter( 'smart_send_payload_totals', function ( array $totals, \WC_Order $order ): array {
wc_get_logger()->info( 'Booking value', array(
'source' => 'my-shop-shipping',
'currency' => $totals['currency'],
'total' => $totals['total_net_amount'] + $totals['total_tax_amount'],
) );
return $totals;
}, 10, 2 );
```
**Filter** · `(string|null $freetext, WC_Order $order) → string|null`
Runs when reading text for the label, in either direction. Input is the customer's order comment when **Include order comment on label** is enabled, otherwise `null`. Return text or `null`; do not return HTML. This does not control WooCommerce order-history notes. The example omits customer comments from labels.
```php theme={null}
add_filter( 'smart_send_shipment_freetext', '__return_null' );
```
**Filter** · `(Smart_Send\Booking\Shipment $shipment, WC_Order $order, bool $is_return) → Smart_Send\Booking\Shipment`
Runs after data extraction and parcel construction, immediately before translation into the API request. Return a `Shipment`. Prefer earlier filters for allocation/weight rules because this is after parcel validation. The example adds an outbound-only internal reference; it does not update the order or persist delivery settings.
```php theme={null}
add_filter( 'smart_send_booking_request', function ( \Smart_Send\Booking\Shipment $shipment, \WC_Order $order, bool $is_return ): \Smart_Send\Booking\Shipment {
if ( ! $is_return ) {
$shipment->set_internal_reference( 'WEB-' . $order->get_order_number() );
}
return $shipment;
}, 10, 3 );
```
**Action** · `(Smart_Send\Booking\Booked_Shipment $booked, Smart_Send\Booking\Shipment $request, WC_Order $order) → void`
Runs once per successfully booked direction, after the API response is mapped and before order-side persistence or document copying. Use `$booked->is_return()` for direction. It does not mean the whole outbound/return run succeeded, and a document's local copy is not ready yet. Do not throw from the listener: a shipment already exists. Use `smart_send_order_fulfilled` when you need stored order results.
Record the shipment identity and direction without relying on order metadata that has not yet been saved. This callback runs separately for outbound and return, including when outbound succeeds and return later fails.
```php theme={null}
add_action( 'smart_send_booking_completed', function ( \Smart_Send\Booking\Booked_Shipment $booked, \Smart_Send\Booking\Shipment $request, \WC_Order $order ): void {
wc_get_logger()->info( 'Smart Send shipment booked', array(
'source' => 'my-shop-shipping',
'order_id' => $order->get_id(),
'shipment_id' => $booked->get_shipment_id(),
'direction' => $booked->is_return() ? 'return' : 'outbound',
) );
}, 10, 3 );
```
**Expected result:** one entry per created shipment in WooCommerce logs under `my-shop-shipping`. No entry is added for a rejected booking. This example does not create another shipment, save an order note or send customer notifications. For an external integration, use the shipment ID as its idempotency key and handle delivery failures without throwing from this callback.
**Action** · `(Smart_Send\Booking\Exceptions\Booking_Exception $exception, Smart_Send\Booking\Shipment $request, WC_Order $order) → void`
Runs when the booking API call throws a handled HTTP client exception, just before it is rethrown as `Booking_Exception`. Read `getMessage()`, `errors()` (field → message list), and `response_id()` (string or null). This is not an all-failures event: local allocation, pickup or delivery validation can fail before the API call. No direction boolean is provided. The example logs a response ID, without address data or field values.
```php theme={null}
add_action( 'smart_send_booking_failed', function ( \Smart_Send\Booking\Exceptions\Booking_Exception $error, \Smart_Send\Booking\Shipment $request, \WC_Order $order ): void {
wc_get_logger()->warning( 'Smart Send booking failed', array(
'source' => 'my-shop-shipping',
'order_id' => $order->get_id(),
'response_id' => $error->response_id(),
) );
}, 10, 3 );
```
### Order side effects and final result
**Filter** · `(bool $save, Smart_Send\Booking\Booked_Shipment $shipment, WC_Order $order) → bool`
Runs after successful booking and persistence of submitted delivery overrides, before document-copy attempts and shipment-history persistence. Defaults to **Save a copy of the PDF** for either direction. Return `false` to skip local copies. A copy failure adds a warning; the booked shipment remains fulfilled and document URLs fall back to Smart Send. The example keeps documents remote.
```php theme={null}
add_filter( 'smart_send_fulfillment_save_documents', '__return_false' );
```
**Filter** · `(string $note_html, Smart_Send\Booking\Booked_Shipment $shipment, WC_Order $order) → string`
Runs after shipment history is saved, before the native order note is added. Return safe HTML/text, or `''` to omit the note. Notes are saved using `WC_Order::add_order_note()` when the caller requests a note. WooCommerce's history refreshes after a page reload; the Smart Send result can appear immediately. The example writes a short plain-text note for either direction.
```php theme={null}
add_filter( 'smart_send_fulfillment_order_note', function ( string $note, \Smart_Send\Booking\Booked_Shipment $shipment, \WC_Order $order ): string {
return esc_html( 'Smart Send shipment ' . $shipment->get_shipment_id() );
}, 10, 3 );
```
**Filter** · `(bool $push, Smart_Send\Booking\Booked_Shipment $shipment, WC_Order $order) → bool`
Runs after the order-note step, before forwarding parcel tracking to the optional WooCommerce Shipment Tracking plugin. Default: `true` outbound, `false` return. This does not create live tracking updates or install that plugin. Returning `false` leaves the booked shipment's own tracking data intact. The example disables forwarding.
```php theme={null}
add_filter( 'smart_send_fulfillment_tracking', '__return_false' );
```
**Filter** · `(string|false $status, Smart_Send\Booking\Booked_Shipment $shipment, WC_Order $order) → string|false`
Runs after tracking. Return a registered WooCommerce status such as `wc-completed`, or `false` to leave the order unchanged. Default: configured **Set order status after label print** for outbound; `false` for return. Updating status can trigger WooCommerce/third-party status hooks and emails. The example prevents Smart Send from changing status for either direction.
```php theme={null}
add_filter( 'smart_send_fulfillment_order_status', '__return_false' );
```
**Action** · `(WC_Order $order, Smart_Send\Fulfillment\Fulfillment_Result $result) → void`
Runs once after all attempted directions and their order-side steps, when at least one direction was fulfilled. A total failure does not fire it. It can carry outbound success alongside return failure. Inspect `get_outbound_shipment()`, `get_return_shipment()`, `shipments()`, `get_steps($shipment)`, `get_order_note_id($shipment)` and `get_warnings($shipment)`. `get_validation_errors($is_return)` and `get_error_details($is_return)` describe failures. See the [booked result contracts](#read-booked-results); do not assume every optional step ran.
Use this event when you need saved note IDs, final document URLs or the outcome of both booking directions. The example records successful shipments and separately flags a failed return. It does not assume that every optional side effect was enabled.
```php theme={null}
add_action( 'smart_send_order_fulfilled', function ( \WC_Order $order, \Smart_Send\Fulfillment\Fulfillment_Result $result ): void {
foreach ( $result->shipments() as $shipment ) {
$label = $shipment->label_document();
wc_get_logger()->info( 'Smart Send order updated', array(
'source' => 'my-shop-shipping',
'order_id' => $order->get_id(),
'shipment_id' => $shipment->get_shipment_id(),
'note_id' => $result->get_order_note_id( $shipment ),
'has_document' => null !== $label,
'warning_count' => count( $result->get_warnings( $shipment ) ),
) );
}
if ( null !== $result->get_return_error() ) {
wc_get_logger()->warning( 'Return booking needs attention', array(
'source' => 'my-shop-shipping',
'order_id' => $order->get_id(),
) );
}
}, 10, 2 );
```
**Expected result:** a combined success logs two shipments. An outbound success/return failure logs the outbound shipment and one warning; retry only the failed direction. If a local PDF copy fails, the shipment is still listed and `warning_count` increases. When using document URLs in your own integration, read `$label->download_url()` only after checking `$label` is not null. Do not log private document URLs. This event does not run when every attempted direction fails.
### Plugin settings
**Filter** · `(string $host) → string`
Runs when constructing the API client. Default host: `https://app.smartsend.io`. Return the scheme and hostname only, for example `https://app.smartsend.dev`; the client appends the API version path. Applies to authentication, pickup lookup and booking. Use credentials for the selected environment; a staging site alone does not change this host.
Use an explicitly designated test shop and credentials for the Smart Send sandbox. Confirm the intended sandbox account and carrier setup before booking. The host filter affects token validation, pickup lookup and booking together.
1. Set WordPress `WP_ENVIRONMENT_TYPE` to `staging` in the test shop's configuration.
2. Add the callback below to your customization plugin.
3. Enter and save the token for the sandbox environment, then validate it.
4. Check checkout separately, then book a synthetic test order in that configured environment.
The callback changes the host only for a staging environment. Do not append `/api/v1/` or another API path; the client adds it.
```php theme={null}
add_filter( 'smart_send_api_endpoint', function ( string $host ): string {
if ( 'staging' !== wp_get_environment_type() ) {
return $host;
}
return 'https://app.smartsend.dev';
} );
```
**Expected result:** staging requests use `https://app.smartsend.dev` plus the client-managed API path; production retains the incoming host. Keep TLS certificate verification enabled. Remove the sandbox override and configure the intended production credentials when setting up a production shop. The plugin's automated-test mocks are test-suite fixtures, not a merchant-facing demo switch.
**Filter** · `(bool $verify) → bool`
Default: `true`. Runs when preparing WordPress HTTP request options. Keep certificate verification enabled for production and sandbox. The example explicitly preserves verification; fix an invalid server certificate or CA configuration rather than disabling verification.
```php theme={null}
add_filter( 'smart_send_sslverify', '__return_true' );
```
**Filter** · `(string $message, string $level, array $context) → string|null|false`
Runs only for entries enabled by the plugin's logging policy. `$level` is a WooCommerce log level; `$context` includes `source` (`smart-send-logistics`) and plugin version. Return a rewritten message, or `null`/`false` to suppress the entry. This filter cannot enable disabled entries or replace the context by returning an array. The example suppresses debug messages only.
```php theme={null}
add_filter( 'smart_send_logging', function ( string $message, string $level, array $context ) {
return 'debug' === $level ? null : $message;
}, 10, 3 );
```
**Filter** · `(string $url) → string`
Runs when building the Smart Send row's configuration guide link on the WordPress plugins screen. Default: `https://smartsend.io/woocommerce/configuration/`. Return a URL, not HTML. It does not change the API endpoint. The example routes the link to the local Smart Send settings screen.
```php theme={null}
add_filter( 'smart_send_configuration_url', function ( string $url ): string {
return admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=smart_send_shipping' );
} );
```
**Filter** · `(string $url) → string`
Runs for the support link on the WordPress plugins screen. Default: `https://smartsend.io/support/`. Return a URL; the renderer escapes it. The example points to a support page on your own shop; create that page before using the snippet.
```php theme={null}
add_filter( 'smart_send_support_url', function ( string $url ): string {
return home_url( '/shipping-help/' );
} );
```
**Filter** · `(string $notice_html) → string`
Runs when Smart Send displays a major-version update notice in the plugins list. Return trusted, safe HTML: the filtered result is rendered as HTML without another sanitization pass. The example appends static guidance. This is a notice hook, not a shipping/booking hook.
```php theme={null}
add_filter( 'ss_in_plugin_update_message', function ( string $notice ): string {
return $notice . '
Review your shop customizations before updating.
';
} );
```
### Data contracts
The six order-reading filters above do not receive a return flag. They read the same order data for either direction. `smart_send_payload_totals` and `smart_send_shipment_freetext` run only when item data is non-empty. Use `smart_send_booking_request` for a final direction-specific adjustment.
`smart_send_payload_items` receives these keys on each row:
| Keys | Type and meaning |
| - | - |
| `order_item_id` | Integer WooCommerce order-line identity; use it for allocation. |
| `product_id`, `variation_id` | Integer catalog references; they do not identify an order line. |
| `sku`, `name` | Strings. A missing product has an empty SKU and the translated name **Deleted**. |
| `description`, `hs_code`, `country_of_origin` | Product customs strings, or null when the product is unavailable. |
| `quantity` | Order-line quantity; parcel allocation requires positive whole quantities. |
| `unit_weight` | Float in kg, or null for an unavailable product. |
| `total_net_amount`, `total_tax_amount` | Non-negative floats for the entire discounted line. |
| `product_missing` | Boolean indicating an unavailable catalog product/variation. |
`smart_send_payload_totals` receives floats `subtotal_net_amount`, `subtotal_tax_amount`, `shipping_net_amount`, `shipping_tax_amount`, `total_net_amount`, `total_tax_amount`, plus the string `currency`. Subtotal excludes shipping and includes non-shipping order fees. Ordinarily subtotal + shipping = total, separately for net and tax; clamping negative values can take precedence. Including-tax amounts are net + tax. Preserve those relationships if changing totals.
### Integration reference
This background describes platform hooks used by Smart Send, not additional public Smart Send customization hooks.
The three WooCommerce-prefixed checkout hooks above are intended for customizations. The table below explains relevant platform hooks that Smart Send **listens to**. Their broader contracts belong to WooCommerce; replacing the Smart Send callbacks is not the supported customization route.
| Platform hook and arguments | How Smart Send uses it |
| - | - |
| `woocommerce_shipping_methods` — filter `(array $methods)` | Registers the Smart Send shipping method; returns the method registry. |
| `woocommerce_package_rates` — filter `(WC_Shipping_Rate[] $rates, array $package)` | Sorts calculated rates when configured; returns rate objects keyed by rate ID. Use a later priority for your own final ordering. |
| `woocommerce_after_shipping_rate` — action `(WC_Shipping_Rate $rate, int $index)` | Renders pickup selection beside the selected rate in Classic Checkout. |
| `woocommerce_after_checkout_validation` — action `(array $data, WP_Error $errors)` | Validates Classic Checkout pickup selection and adds errors. |
| `woocommerce_checkout_create_order` — action `(WC_Order $order, array $data)` | Adds the verified Classic Checkout pickup choice before order persistence. |
| `woocommerce_store_api_checkout_update_order_from_request` — action `(WC_Order $order, WP_REST_Request $request)` | Validates/persists the Checkout Block choice through the Store API. |
| `woocommerce_order_details_after_order_table` — action `(WC_Order $order)` | Displays the saved pickup point on order details. |
| `woocommerce_email_after_order_table` — action `(WC_Order $order, bool $sent_to_admin, bool $plain_text, WC_Email $email)` | Displays the saved pickup point in HTML/plain-text email; the Smart Send callback consumes the first three arguments. |
| `woocommerce_product_options_shipping` — action `()` | Adds customs fields to the product's Shipping tab. |
| `woocommerce_admin_process_product_object` — action `(WC_Product $product)` | Sets submitted customs metadata on the product object before WooCommerce saves it. |
Smart Send also uses WooCommerce's Blocks registration and HPOS compatibility mechanisms. These registration details and the experimental Blocks data-attribute filter are implementation details; use the pickup filters above for shared behavior across checkout types.
Smart Send uses these Subscriptions filters at priority 10:
| Filter | Arguments and return | Smart Send behavior |
| - | - | - |
| `wc_subscriptions_renewal_order_data` | `(array $metadata) → array` | Excludes completed booking outcomes and copied tracking records. |
| `wcs_renewal_order_items` | `(WC_Order_Item[] $items, WC_Order $renewal, WC_Subscription $subscription) → array` | Carries exact source item identities through item copying. |
| `wcs_renewal_order_created` | `(WC_Order $renewal, WC_Subscription $subscription) → WC_Order` | Rebinds allocations to new order-item IDs and removes temporary markers; ambiguous plans require a reset. |
Keep these filters' return values intact when adding your own Subscriptions callbacks. This integration follows the Subscriptions 4.9+ data-copy API; a test of the hook contract is not a test of the commercial plugin's scheduled renewal/payment engine. See [compatibility](/integrations/woocommerce/introduction#compatibility).
These snippets were executed against the plugin's real PHP value objects with isolated WordPress/WooCommerce test doubles. Checks cover plain-text labels, result order/limits, automatic versus explicit weight, colli allocation and outbound/return event results. They do not prove carrier acceptance, your other plugins' interactions or an external system's delivery. Verify the affected workflow on your configured test shop before deploying.
## Code snippets
Use these code snippets to change how the Smart Send plugin books shipping labels, for example to add packaging weight or split heavy orders into several parcels. Each snippet uses one of the [hooks above](#filters-and-actions) and works on its own.
Code snippets are an advanced feature for developers. A mistake in PHP code can stop your webshop from working. Test a snippet on a staging site before you add it to your live webshop.
All snippets require Smart Send for WooCommerce 9.0 or later. To add a snippet:
1. Open the snippet below and select the **Code** tab.
2. Copy the code into one of these places:
* The `functions.php` file of a child theme .
* A small custom plugin.
* A snippets plugin such as Code Snippets .
3. Change the settings at the top of the snippet to match your webshop.
4. Create a shipping label for a test order and check the result.
The weight booked for a parcel is the weight of the products in it. The box, filling and tape add weight too, and the carrier can charge extra when a parcel is heavier than booked. This snippet adds a fixed packaging weight to every parcel and books parcels without a product weight with a minimum weight instead of zero.
A parcel weight that you enter on the order screen is booked as entered; the snippet only changes calculated weights.
**Settings:** `$packaging_weight` is the weight in kg added to every parcel. `$minimum_weight` is the lowest weight in kg a parcel is booked with.
**Hook:** [`smart_send_parcel_default_weight`](#smart-send-parcel-default-weight)
```php add-packaging-weight.php theme={null}
add_filter(
'smart_send_parcel_default_weight',
function ( float $weight, \Smart_Send\Delivery\Parcel_Spec $parcel, WC_Order $order ) {
$packaging_weight = 0.3; // kg added to every parcel.
$minimum_weight = 0.5; // kg; the lightest weight a parcel is booked with.
return max( $weight + $packaging_weight, $minimum_weight );
},
10,
3
);
```
Carriers send text messages to the receiver when the parcel is on its way or ready at the pickup point, and they need the phone number in international format. Customers usually type a local number such as `12 34 56 78`. This snippet adds the calling code of the shipping country (`+4512345678`) and removes spaces, dashes and brackets.
Numbers that already start with `+` or `00` are only cleaned up. A leading 0 is removed, so `070-123 45 67` in Sweden becomes `+46701234567`.
**Hook:** [`smart_send_receiver_phone`](#smart-send-receiver-phone)
```php add-country-code-to-phone-numbers.php theme={null}
add_filter(
'smart_send_receiver_phone',
function ( $phone, WC_Order $order ) {
if ( null === $phone || '' === $phone ) {
return $phone;
}
$number = preg_replace( '/[^0-9+]/', '', $phone );
if ( 0 === strpos( $number, '+' ) ) {
return $number;
}
if ( 0 === strpos( $number, '00' ) ) {
return '+' . substr( $number, 2 );
}
$country = $order->get_shipping_country() ? $order->get_shipping_country() : $order->get_billing_country();
$calling_code = WC()->countries->get_country_calling_code( $country ); // For example "+45".
if ( '' === $calling_code ) {
return $phone; // Unknown country: leave the number alone.
}
return $calling_code . ltrim( $number, '0' );
},
10,
2
);
```
The shipping label has room for a short text. This snippet prints the order number and a short packing list on the label, for example `Order 1234: 2 x HOODIE-L, 1 x CAP`, so whoever opens the parcel or handles a return can match it to the order. When **Include order comment on label** is enabled in the Smart Send settings, the customer's comment is added after the packing list.
**Settings:** `$max_length` is the maximum number of characters. Keep the text short, as carriers may cut off long texts.
**Hook:** [`smart_send_shipment_freetext`](#smart-send-shipment-freetext)
```php print-order-number-on-label.php theme={null}
add_filter(
'smart_send_shipment_freetext',
function ( $freetext, WC_Order $order ) {
$max_length = 100; // Characters.
$products = array();
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
$products[] = $item->get_quantity() . ' x ' . ( $product && $product->get_sku() ? $product->get_sku() : $item->get_name() );
}
$text = sprintf( 'Order %s: %s', $order->get_order_number(), implode( ', ', $products ) );
if ( $freetext ) {
$text .= ' - ' . $freetext;
}
return mb_substr( $text, 0, $max_length );
},
10,
2
);
```
Carriers have a maximum weight per parcel, typically 20 kg for pickup points and 30-35 kg for home delivery. When you create the label, this snippet distributes the order's items over as few parcels as possible without exceeding the maximum weight. A 45 kg order is booked as three parcels without splitting it by hand.
The heaviest item is placed first, and each item goes into the first parcel it fits in. A single item heavier than the maximum gets a parcel of its own, which the carrier may refuse.
The snippet makes no changes when:
* You have already split the order into parcels on the order screen.
* All items fit in one parcel.
* A product on the order has been deleted, so its weight is unknown.
* The label is a return label. Set `$split_return_labels` to `true` to split return labels too.
**Reset to one parcel** on the order screen removes your own split, and the snippet then splits the order again. To book a heavy order as one parcel anyway, enter the parcel weight on the order screen. The booked parcels are shown under **Booked shipments** on the order screen.
**Settings:** `$max_parcel_weight` is the maximum weight in kg of the items in one parcel. If you also use [Add packaging weight to every parcel](#add-packaging-weight), lower `$max_parcel_weight` by the packaging weight.
**Hook:** [`smart_send_delivery_details`](#smart-send-delivery-details)
```php split-orders-into-parcels-by-weight.php theme={null}
add_filter(
'smart_send_delivery_details',
function ( \Smart_Send\Delivery\Delivery_Details $details, WC_Order $order, bool $is_return ) {
$max_parcel_weight = 20.0; // kg of items per parcel.
$split_return_labels = false;
if ( $is_return && ! $split_return_labels ) {
return $details;
}
// The merchant's own split always wins.
$plan = $details->get_parcel_plan();
if ( $plan && ! $plan->is_empty() ) {
return $details;
}
// Every unit of every order line, heaviest first.
$units = array();
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
if ( ! $product ) {
return $details; // A deleted product: its weight is unknown.
}
$weight = (float) wc_get_weight( (float) $product->get_weight(), 'kg' );
$quantity = $item->get_quantity();
for ( $i = 0; $i < $quantity; $i++ ) {
$units[] = array(
'order_item_id' => $item->get_id(),
'name' => $item->get_name(),
'weight' => $weight,
);
}
}
usort(
$units,
function ( $a, $b ) {
return $b['weight'] <=> $a['weight'];
}
);
// First fit decreasing.
$parcels = array();
foreach ( $units as $unit ) {
$placed = false;
foreach ( $parcels as $index => $parcel ) {
if ( $parcel['weight'] + $unit['weight'] <= $max_parcel_weight ) {
$parcels[ $index ]['weight'] += $unit['weight'];
$parcels[ $index ]['units'][] = $unit;
$placed = true;
break;
}
}
if ( ! $placed ) {
$parcels[] = array(
'weight' => $unit['weight'],
'units' => array( $unit ),
);
}
}
if ( count( $parcels ) < 2 ) {
return $details;
}
// A parcel lists each order line once, with the number of its units in that parcel.
$plan = new \Smart_Send\Delivery\Parcel_Plan();
foreach ( $parcels as $index => $parcel ) {
$lines = array();
foreach ( $parcel['units'] as $unit ) {
$id = $unit['order_item_id'];
if ( ! isset( $lines[ $id ] ) ) {
$lines[ $id ] = array(
'quantity' => 0,
'name' => $unit['name'],
);
}
++$lines[ $id ]['quantity'];
}
$spec = ( new \Smart_Send\Delivery\Parcel_Spec() )->set_reference( (string) ( $index + 1 ) );
foreach ( $lines as $order_item_id => $line ) {
$spec->add_item( $order_item_id, $line['quantity'], $line['name'] );
}
$plan->add_spec( $spec );
}
return $details->set_parcel_plan( $plan );
},
10,
3
);
```
Each time a shipping label is created, from the order screen or the bulk action, this snippet sends the shipment and its label to an endpoint of your own, such as a warehouse system, an ERP, a print server, Zapier or Make. The outbound label and the return label are sent as separate requests.
The request body is JSON:
```json Request body theme={null}
{
"event": "label_created",
"order_id": 1234,
"order_number": "1234",
"direction": "outbound",
"shipment": { "shipment_id": "...", "carrier": "postnord", "tracking_code": "...", "parcels": [], "documents": [] },
"label": { "format": "pdf", "url": "https://...", "content_base64": "JVBERi0..." }
}
```
`direction` is `outbound` or `return`. `label.content_base64` contains the label file, so the receiving system does not have to download it. If the plugin cannot download the file, the value is `null` and the receiving system uses `label.url` instead.
The request is sent while you wait for the label, so keep the endpoint fast. A failed request never cancels the label. The error is written to the WooCommerce log with the source `smart-send-snippets` and added as a private note on the order.
**Settings:** `$endpoint` is the URL that receives the requests.
**Hook:** [`smart_send_order_fulfilled`](#smart-send-order-fulfilled)
```php send-labels-to-webhook.php theme={null}
add_action(
'smart_send_order_fulfilled',
function ( WC_Order $order, \Smart_Send\Fulfillment\Fulfillment_Result $result ) {
$endpoint = 'https://example.com/webhooks/smart-send'; // Change to your own endpoint.
// One request per label: the outbound label and, when one was created, the return label.
foreach ( $result->shipments() as $shipment ) {
$label = $shipment->label_document();
$content = null;
if ( $label ) {
$download = wp_safe_remote_get(
$label->get_url(),
array( 'timeout' => 30, 'redirection' => 3, 'limit_response_size' => 20 * 1024 * 1024 + 1 )
);
$bytes = wp_remote_retrieve_body( $download );
if ( ! is_wp_error( $download ) && 200 === wp_remote_retrieve_response_code( $download )
&& '' !== $bytes && strlen( $bytes ) <= 20 * 1024 * 1024 ) {
$content = base64_encode( $bytes );
}
}
$body = wp_json_encode(
array(
'event' => 'label_created',
'order_id' => $order->get_id(),
'order_number' => $order->get_order_number(),
'direction' => $shipment->is_return() ? 'return' : 'outbound',
'shipment' => $shipment->to_array(),
'label' => $label ? array(
'format' => $label->get_format(),
'url' => $label->download_url(),
'content_base64' => $content,
) : null,
)
);
$response = wp_remote_post(
$endpoint,
array(
'timeout' => 10,
'headers' => array(
'Content-Type' => 'application/json',
),
'body' => $body,
)
);
$status = wp_remote_retrieve_response_code( $response );
if ( is_wp_error( $response ) || $status < 200 || $status >= 300 ) {
$reason = is_wp_error( $response ) ? $response->get_error_message() : 'HTTP ' . $status;
wc_get_logger()->warning(
sprintf( 'Could not send shipment %s of order %d to %s: %s', $shipment->get_shipment_id(), $order->get_id(), $endpoint, $reason ),
array( 'source' => 'smart-send-snippets' )
);
$order->add_order_note( sprintf( 'The shipping label %s could not be sent to %s: %s', $shipment->get_shipment_id(), $endpoint, $reason ) );
}
}
},
10,
2
);
```
## Metadata
Smart Send stores different data on the order, its shipping items and the catalog products. The keys below describe those records; they are not interchangeable. Prefer the documented hooks and [API](#api) when changing booking behavior. Use WooCommerce CRUD objects when inspecting metadata so your integration works with both HPOS and traditional order storage.
For order reads and intentional updates, follow [WooCommerce’s HPOS recipe book](https://developer.woocommerce.com/docs/features/orders/high-performance-order-storage/recipe-book/) : obtain the `WC_Order`, use its metadata methods, and save through the object. Do not assume orders are WordPress posts.
### Shipping-item configuration
These values belong to each `WC_Order_Item_Shipping`, not to `WC_Order`. WooCommerce copies them from the chosen Smart Send rate when it creates the shipping item.
| Key | Stored value | Meaning |
| - | - | - |
| `smart_send_shipping_method` | String, for example `postnord_agent`. | Outbound Smart Send service selected for this shipping method. |
| `smart_send_return_method` | Service-code string, or empty. | Configured return service. A Smart Send shipping item without one does not have a configured return service. |
| `smart_send_auto_generate_return_label` | `'yes'` or `'no'`. | Recorded preference for including a return when booking outbound shipping. It does not book anything when the order is placed. |
These are snapshots of the method's configuration. Editing a zone's defaults does not rewrite existing shipping items. A service chosen for one booking in the order panel also does not overwrite these values. Read them with `$shipping_item->get_meta( $key, true )`; use `SS_SHIPPING_WC()->method_resolver()` when you need the resolved booking service, including the separate mapping for WooCommerce's native Free Shipping method.
### Order configuration and booking results
Read these fields from a `WC_Order` obtained with `wc_get_order()`. Delivery configuration is managed by `Smart_Send\Delivery\Order_Meta`; booking results are managed by `Smart_Send\Fulfillment\Shipment_IDs`.
| Key | Stored value | Meaning |
| - | - | - |
| `ss_shipping_order_agent_no` | Pickup-point number as a string. | The selected pickup point's carrier-facing number. Keep it consistent with the stored point object. |
| `_ss_shipping_order_agent` | Plain object with pickup-point data. | The saved pickup address and related data. Both checkout types save a server-verified point. |
| `ss_shipping_order_parcels` | Array with a `specs` list. | Reusable allocation of **order-item IDs** and quantities to colli. Explicit weights and dimensions are stored as `null`. |
| `_ss_shipping_label_id` | Smart Send shipment ID string. | Latest successfully recorded **outbound** shipment. |
| `_ss_shipping_return_label_id` | Smart Send shipment ID string. | Latest successfully recorded **return** shipment. |
| `_ss_shipping_labels` | List of booking records. | The newest 50 recorded shipments, stored oldest first within that list. Each row has `direction` (`outbound` or `return`), `shipment_id` (string) and `booked_at` (ISO 8601 UTC string). |
Shipment IDs identify Smart Send shipments; they are not tracking numbers, PDF URLs or WordPress attachment IDs. The history contains one row per shipment, not one per colli, and does not represent live carrier events. Outbound and return are recorded separately, including when outbound succeeds but the return fails. Use `SS_SHIPPING_WC()->shipment_ids()->get( $order, false )` for the latest outbound ID, `true` for return, or `labels( $order )` for the history. The ID reader returns an empty string when no ID is stored.
For the distinction between submitted values, filter changes and persistent data, see [delivery details and persistence](#delivery-details-and-persistence).
Known properties include `agent_no`, `company`, `address_line1`, `address_line2`, `postal_code`, `city` and `country`. A point may also contain `id`, `carrier`, `name_line1`, `name_line2`, `distance`, `coordinates` and `opening_hours`; do not assume every optional property is present. Country is an ISO 3166-1 alpha-2 code. Coordinates have `latitude` and `longitude`; opening-hour rows have `day`, `opens` and `closes`.
Use `SS_SHIPPING_WC()->order_meta()->read( $order )->get_pickup_point()` for a `Smart_Send\Delivery\Pickup_Point` or `null`. The typed object supports accessors and `to_array()` without requiring callers to depend on every raw property. For booking changes, use `smart_send_delivery_details`; changing only the raw agent number is not a substitute for resolving and validating a compatible pickup point.
This example represents two units from order item `123` in one colli. That ID is local to the order; it is neither a product ID nor a variation ID.
```json theme={null}
{
"specs": [
{
"reference": "1",
"weight": null,
"length": null,
"width": null,
"height": null,
"items": [
{ "order_item_id": 123, "quantity": 2, "name": "Cotton T-shirt" }
]
}
]
}
```
`reference` and the optional item `name` are labels, not item identities. Quantities and order-item IDs are positive integers. `Parcel_Plan::from_array()` parses the canonical shape; allocation must also be checked against the current order's item IDs and quantities. Saving through `Order_Meta` strips the four measurement fields to `null`. An empty `specs` list means one parcel containing all items.
Do not copy this array unchanged to another order. If items or quantities change, an incompatible saved allocation requires a reset before booking. See [delivery details and persistence](#delivery-details-and-persistence) for allocation rules and the measurements that apply only to a booking.
The Subscriptions integration excludes `_ss_shipping_label_id`, `_ss_shipping_return_label_id` and `_ss_shipping_labels` from renewal metadata. It preserves reusable delivery configuration and remaps parcel allocations to the renewal's new order-item IDs. If that mapping cannot be verified, `ss_shipping_order_parcels` can contain an internal `unmapped_subscription_plan` wrapper that forces an explicit reset. This is an error marker, not a supported parcel-plan format to write.
`_smart_send_renewal_source_item` is a temporary internal product-order-item marker with `order_id` and `item_id`; the integration removes it after processing the copied items. Do not use it as a persistent integration field.
`_wc_shipment_tracking_items` belongs to WooCommerce Shipment Tracking. Smart Send uses that extension's API for tracking and excludes copied tracking records from renewals; it does not define the extension's metadata schema. `_vc_aio_options` belongs to vConnect and is read for compatibility when resolving delivery details. Neither field is a Smart Send-owned write contract.
A submitted order-screen value takes precedence over a stored value before `smart_send_delivery_details` runs. Following successful booking, the submitted pickup selection and parcel item allocations are saved. The submitted method, parcel weights and dimensions apply only to the current booking. Failed booking does not save those overrides. The filter's returned object determines what is booked, but it does not itself determine what is saved.
For a combined outbound/return request, the submitted parcel plan applies to both directions unless a separate return plan overrides it. A null or empty plan means one parcel with all order items. A single spec with no allocations also includes all items and can supply explicit measurements. Multiple specs require complete allocation: every order unit exactly once, positive whole quantities, and no duplicate order-item row within a spec. Unknown order-item IDs and under-/over-allocation are rejected.
### Product customs information
These fields belong to a `WC_Product` or `WC_Product_Variation`, not an order or shipping item.
| Key | Stored value | Meaning |
| - | - | - |
| `_ss_country_of_origin` | Country-code string, for example `DK`. | ISO 3166-1 alpha-2 country where the goods were produced. |
| `_ss_customs_desc` | Text string. | Description of the goods for customs. |
| `_ss_hs_code` | Text string. | HS/tariff classification. Preserve it as text rather than casting it to an integer. |
Use `wc_get_product()` and the product's `get_meta()` for reading. To save an intentional product-data change, use `update_meta_data()` followed by the product's `save()`; setting a value does not determine whether it is the correct customs classification.
Booking reads the current catalog values. A variation's value takes precedence unless it is `''` or `null`, in which case the parent product's value is used. The plugin's product editor supplies the fields on the main product's Shipping tab; it does not add a separate editor for each variation. These fields are not snapshots copied onto order lines. A deleted catalog product cannot supply its customs data. See the [merchant guide to customs fields](/integrations/woocommerce/shipping-labels#customs-information).
## API
Use the plugin's API inside WordPress to read Smart Send data for an existing `WC_Order`. Smart Send and a supported WooCommerce version must be active. Call the examples after Smart Send initializes on `init` at priority `0`, for example from an `init` callback at priority `10` or a later order hook. If you start with an order ID, load it with `wc_get_order($order_id)` and check that the result is a `WC_Order`.
These reads use WooCommerce's order and item APIs, so they work with HPOS. They do not book shipments or contact the Smart Send API. The example functions use a `my_shop_` prefix; choose your own prefix in your integration.
`SS_SHIPPING_WC()->order_meta()->read($order)` returns `Smart_Send\Delivery\Delivery_Details` with the stored pickup point and parcel plan. `get_pickup_point()` returns a `Smart_Send\Delivery\Pickup_Point` or `null`. See the [pickup point accessors](#pickup-point-accessors) for the available fields.
The helper reads the saved point; it does not find nearby points or refresh its address. If no Smart Send point is stored, it also recognizes the supported vConnect pickup point metadata. An agent number stored on its own does not provide a complete pickup point object. Individual fields can be `null`.
`get_parcel_plan()` on the same details object returns the saved plan or `null`. To distinguish a missing plan from an invalid saved allocation, use `SS_SHIPPING_WC()->order_meta()->parcel_plan_error($order)`, which returns an explanation or `null`. These stored details do not resolve a shipping method; use the next example for that.
Return the saved point's identity and address, or `null` when no point is available. Escape individual values for the output context if you render them in HTML.
```php theme={null}
function my_shop_get_order_pickup_point( \WC_Order $order ): ?array {
$point = SS_SHIPPING_WC()->order_meta()->read( $order )->get_pickup_point();
if ( null === $point ) {
return null;
}
return array(
'agent_no' => $point->get_agent_no(),
'carrier' => $point->get_carrier(),
'company' => $point->get_company(),
'address_line1' => $point->get_address_line1(),
'address_line2' => $point->get_address_line2(),
'postal_code' => $point->get_postal_code(),
'city' => $point->get_city(),
'country' => $point->get_country(),
);
}
```
There are two different IDs to work with:
* `$order->get_shipping_methods()` returns the WooCommerce shipping line items saved on the order. `get_method_id()` identifies the WooCommerce method, such as `smart_send_shipping` or `free_shipping`; `get_instance_id()` identifies the shipping-zone method instance.
* `SS_SHIPPING_WC()->method_resolver()` resolves one Smart Send service ID for each direction, such as `postnord_agent` or `postnord_returndropoff`. It reads the order's Smart Send shipping-line metadata, the current [mapping for native free shipping](/integrations/woocommerce/shipping-methods#native-free-shipping), or supported third-party method mappings.
`resolve_outbound($order)` and `resolve_return($order)` return `''` when no service can be resolved. If a Smart Send shipping line has no return method configured, `resolve_return()` throws `Smart_Send\Booking\Exceptions\Booking_Exception`; the example keeps this distinction in `return_error`. `is_auto_return_enabled($order)` reads the automatic-return setting saved on the shipping line.
These are the defaults derived for the order. They do not include unsaved choices in the order screen, submitted booking overrides, or changes made by `smart_send_delivery_details`. They also do not tell you which service a previous shipment was actually booked with; read that from the `Booked_Shipment` delivered to a [booking action](#smart-send-booking-completed).
Return both the WooCommerce shipping lines and the resolved Smart Send defaults. The return error is plain text; escape it before displaying it in HTML.
```php theme={null}
function my_shop_get_order_shipping_methods( \WC_Order $order ): array {
$shipping_lines = array();
foreach ( $order->get_shipping_methods() as $item_id => $item ) {
$shipping_lines[] = array(
'order_item_id' => (int) $item_id,
'method_id' => $item->get_method_id(),
'instance_id' => $item->get_instance_id(),
'title' => $item->get_method_title(),
);
}
$resolver = SS_SHIPPING_WC()->method_resolver();
$return_method = '';
$return_error = null;
try {
$return_method = $resolver->resolve_return( $order );
} catch ( \Smart_Send\Booking\Exceptions\Booking_Exception $exception ) {
$return_error = $exception->getMessage();
}
return array(
'shipping_lines' => $shipping_lines,
'outbound' => $resolver->resolve_outbound( $order ),
'return' => $return_method,
'return_error' => $return_error,
'auto_return' => $resolver->is_auto_return_enabled( $order ),
);
}
```
`SS_SHIPPING_WC()->shipment_ids()` reads the shipment references saved on the order:
| Method | Result |
| - | - |
| `get($order, false)` | Latest saved outbound shipment ID, or `''`. |
| `get($order, true)` | Latest saved return shipment ID, or `''`. |
| `labels($order)` | Saved history rows, oldest first; each contains `direction`, `shipment_id` and `booked_at`. Missing history returns an empty array. |
`direction` is `outbound` or `return`; `booked_at` is an ISO 8601 UTC timestamp or `null` when unavailable. The plugin retains the latest 50 history rows in total across both directions. The latest ID for each direction is stored separately, so an ID can exist even when `labels()` is empty. A row represents one shipment, which may contain several parcels.
These are saved booking references. They do not contain live carrier status, tracking links, documents or the complete `Booked_Shipment`. To read documents and tracking details returned by a booking, listen to [smart\_send\_booking\_completed](#smart-send-booking-completed) or [smart\_send\_order\_fulfilled](#smart-send-order-fulfilled) and use the [booked result accessors](#read-booked-results). A `Fulfillment_Result` describes that particular run, including a possible outbound success and return failure; it is not re-created from the order history.
Read the latest shipment ID for each direction and the retained history independently. Do not assume a successful outbound booking also produced a return shipment.
```php theme={null}
function my_shop_get_order_bookings( \WC_Order $order ): array {
$shipments = SS_SHIPPING_WC()->shipment_ids();
return array(
'latest_outbound_id' => $shipments->get( $order, false ),
'latest_return_id' => $shipments->get( $order, true ),
'history' => $shipments->labels( $order ),
);
}
```
`Pickup_Point` supplies `get_agent_no()`, `get_company()`, `get_address_line1()`, `get_address_line2()`, `get_postal_code()`, `get_city()`, `get_country()`, `get_carrier()`, `get_distance()`, `get_latitude()`, `get_longitude()` and `get_opening_hours()`. Optional values can be null. Opening hours are a list of `day`, `opens`, `closes` rows: the day is a lowercase English weekday and times use `HH:MM:SS`. An empty list means unknown opening hours. `to_array()` gives a serializable representation; it is not permission to trust client-submitted names or addresses.
`Booked_Shipment` exposes `get_shipment_id()`, `get_carrier()`, `get_service_code()`, `is_return()`, `get_state()`, `get_booked_at()`, `get_tracking_code()`, `get_tracking_url()`, `parcels()`, `documents()` and `codes()`. Optional tracking fields can be null. `label_document()` returns a `Shipment_Document` or null; do not assume a PDF exists for every result. A document's `download_url()` chooses the saved local copy when available, otherwise the Smart Send URL.
`Fulfillment_Result::get_steps($shipment)` reports `save_documents` (`true`, `false` or `'failed'`), `order_note` (boolean), `tracking` (whether forwarding was requested) and `order_status` (status or `false`). A tracking step does not prove that an optional third-party integration was installed or delivered an email.
Use `get_order_note_id($shipment)` for the saved note's integer ID or null. `get_order_note($shipment)` supplies note HTML for PHP consumers. The serializable `to_array()` instead contains an `order_note` object with an `id`, not note HTML. Its rows have `direction`, `status` (`fulfilled`/`failed`), and shipment/steps/warnings or an error. `get_error_details($is_return)` returns null or an array with `message`, `response_id`, `fields` and `html`; treat `message` as plain text and escape output appropriately.
# FAQ
Source: https://docs.smartsend.io/integrations/woocommerce/faq
Answers, troubleshooting and every Smart Send setting for connection, shipping prices, pickup points, labels and returns in WooCommerce.
Find your question or a setting name below. Open an answer for its explanation, default and relevant examples. For an error, note the message and action; the [Smart Send log](#logs) can help identify the cause.
## Where do I find the settings?
| Area | Location | Applies to |
| - | - | - |
| **Global** | **WooCommerce → Settings → Shipping → Smart Send** | The whole shop. |
| **Shipping method** | **WooCommerce → Settings → Shipping → Shipping zones → Edit zone → Edit Smart Send method** | One method in one zone. |
Click **Save changes** after editing. Defaults describe a newly configured screen; review and save the values you intend to use. See [add a shipping method](/integrations/woocommerce/shipping-methods) if you need to create one first.
## Connection and test setup
**Location:** [Global](#settings).
**Default: empty.** Open **WooCommerce → Settings → Shipping → Smart Send** and enter the token in **API Token**. It connects the shop to your Smart Send account and enables account validation, pickup lookups and booking.
Click **Save changes** before **Validate API Token**; validation reads the saved value. Follow the [connection guide](/integrations/woocommerce/introduction#connect-plugin) to create and check the token.
**Location:** [Global](#settings).
This is an action button, not a saved setting. It checks the **saved** token and displays the result. It does not create a shipment. See [connection testing](/integrations/woocommerce/introduction#api-token).
1. Open **WooCommerce → Settings → Shipping → Smart Send**.
2. Confirm that the token was copied in full and click **Save changes**.
3. Click **Validate API Token** and read the displayed reason. Replace a token that has been revoked or is invalid.
4. If the response indicates a connection or server failure, check that the shop can make outbound HTTPS requests and examine the relevant log entry.
A successful validation confirms authentication. If booking still fails, follow [booking errors](#booking) and check the carrier connection. See the complete [connection guide](/integrations/woocommerce/introduction#connect-plugin).
No. It checks authentication and returns account information. It does not book a shipment or verify all carrier and shipment details. [What each test checks](/integrations/woocommerce/introduction#test-your-setup).
Test a known cart and address to check methods, prices and pickup selection. Booking from an order is a separate action and creates a real shipment with normal production credentials. A staging shop alone is not a simulated booking environment. [Test your setup](/integrations/woocommerce/introduction#test-your-setup).
## Shipping methods and availability
1. Check the shipping address and the order of [WooCommerce shipping zones](/integrations/woocommerce/shipping-methods#first-matching-zone). Only the first matching zone supplies methods.
2. Confirm that the intended method is enabled in that zone and has a **Shipping Method** service selected.
3. Compare the cart weight with the configured rows. A 0–5 kg row excludes exactly 5 kg; use the next row for that weight.
4. Review shipping-class and excluded-role conditions when **Advanced Settings** is enabled. Test as the same customer type that reported the issue.
5. If you changed configuration, allow checkout to recalculate with the intended address and cart. WooCommerce’s shipping debug mode can help identify a zone during troubleshooting; it is separate from Smart Send’s **Debug Log**.
A matched zone without an available method does not borrow methods from another overlapping zone. See [configuration examples](/integrations/woocommerce/shipping-methods#examples) for known cart/result pairs.
WooCommerce uses the first matching zone from top to bottom. If the Nordic zone includes DK and is above Denmark, a Danish address matches the Nordic zone. Move Denmark above it. [Zone order example](/integrations/woocommerce/shipping-methods#first-matching-zone).
**Location:** [Shipping method](#settings).
**Default:** **Smart Send**. Required customer-facing text, such as `Pickup point` or `Home delivery`. It also identifies the method in the zone. The title does not select a carrier service.
**Location:** [Shipping method](#settings).
**Default:** **- Select Method -**. Select the outbound carrier service for this method; a valid service is required when saving. Services are grouped by carrier. The choice controls booking and whether checkout shows a pickup selector. Configure a service your Smart Send account and carrier agreement support for the route.
**Location:** [Global](#settings).
**Default:** off; the zone's method order is used. When enabled, the available shipping rates are sorted from lowest to highest **cost plus tax**. This applies to the package's available methods, including methods supplied by WooCommerce or other plugins. It changes display order, not prices, availability or zone matching.
For example, pickup at 39 DKK is listed before home delivery at 59 DKK even if the home method is first in the zone.
Check **Advanced Settings**, the selected shipping-class rule and classes, and **Exclude User role**. Different class rules treat “any” and “all” cart items differently. Guest visibility must be checked separately from a logged-in role. [Class and role examples](/integrations/woocommerce/shipping-methods#shipping-classes).
**Location:** [Shipping method](#settings).
**Default:** off. Enable it to show and apply shipping-class and excluded-role rules. With it off, those saved advanced rules are ignored. It does not disable weight coverage or pricing conditions. For example, enable it before restricting a method to parcels of a particular shipping class.
**Location:** [Shipping method](#settings).
**Default:** **N/A**. Requires **Advanced Settings** and at least one selected **Shipping classes** entry. Only products that need shipping participate.
| Choice | Availability rule |
| - | - |
| **N/A** | No shipping-class restriction. |
| **ALL products belong to one of the shipping classes** | Every physical product belongs to a selected class. |
| **At least ONE product belongs to one of the shipping classes** | One or more physical products belong to a selected class. |
| **ALL products do NOT belong to one of the shipping classes** | No physical product belongs to a selected class. |
| **At least ONE product does NOT belongs to one of the shipping classes** | At least one physical product is outside the selected classes. |
The last label is reproduced as it appears in the interface. For a mixed cart, “all outside” and “at least one outside” give different results; see [shipping-class examples](/integrations/woocommerce/shipping-methods#shipping-classes).
**Location:** [Shipping method](#settings).
**Default:** none selected. Select one or more existing WooCommerce shipping classes for the preceding rule. With none selected, the plugin applies no class restriction. Create classes in WooCommerce and assign them to the products first. Multiple selected classes form one allowed/checked set; a product need not belong to every selected class.
**Location:** [Shipping method](#settings).
**Default:** none selected. With **Advanced Settings** enabled, hide the method from customers with any selected role. **Guest** means a customer who is not logged in. Selecting **Customer** does not also exclude guests. Roles are those registered in your WordPress shop, plus Guest.
For example, select **Guest** to require login for this method. Other availability rules still apply after login. See [customer-role examples](/integrations/woocommerce/shipping-methods#customer-roles).
## Prices, tax and free shipping
Check the selected zone and method before editing the price. Compare entered rates with [Tax status](#tax-status) and WooCommerce’s cart tax display, then check [Cost based on weight](#weight-prices).
For a threshold, review [Minimum order amount](#minimum-order-amount), [Flat rate requires...](#flat-rate-requires) and [Flat fee cost](#flat-fee-cost). A matching rule can replace the price without making an otherwise unavailable method available. See the [free-shipping examples](/integrations/woocommerce/shipping-methods#free-shipping).
Check the discounted subtotal on the store’s checkout tax basis, the minimum amount, and whether the rule requires a free-shipping coupon, a minimum amount, either or both. The replacement **Flat fee cost** must be zero for free shipping; availability restrictions still apply. [Worked free-shipping examples](/integrations/woocommerce/shipping-methods#free-shipping).
It depends on WooCommerce’s tax settings and the method’s **Tax status**. In our examples, a taxable rate of 31.20 DKK before VAT displays as 39 DKK with 25% VAT. [Pricing assumptions](/integrations/woocommerce/shipping-methods#examples).
**Location:** [Shipping method](#settings).
**Default:** **Taxable**. Choices are **Taxable** and **None**. Taxable lets WooCommerce calculate shipping tax using the shop's tax settings; it does not create a tax rate. None leaves this method untaxed.
Shipping costs are entered excluding tax. Whether checkout displays an inclusive amount follows WooCommerce's cart/checkout tax-display setting. For example, 31.20 DKK becomes 39.00 DKK with applicable 25% VAT and inclusive display.
With rows 0–5 kg and 5–20 kg, exactly 5 kg matches the second row: lower bounds are inclusive and upper bounds exclusive. Exactly 20 kg requires another matching row. [Weight-band example](/integrations/woocommerce/shipping-methods#weight-bands).
**Location:** [Shipping method](#settings).
Columns: **Minimum**, **Maximum** and **Cost**. The new editor proposes a row from `0` to `20` with a cost of `15`; replace it with your intended coverage and price. Bounds use **WooCommerce → Settings → Products → Weight unit**, not a fixed kg unit.
* A nonzero minimum is inclusive; a nonzero maximum is exclusive. A `5`–`20` row covers 5 kg but not 20 kg in a kg shop.
* An empty or literal `0` bound is unrestricted on that side. A maximum of `0` does not mean zero-weight products only.
* If rows overlap, the **last matching row with a usable cost** determines the price. Avoid overlaps unless that precedence is intentional.
* A gap means the method is unavailable at that weight, even when a free-shipping condition is met.
* With no rows, every weight passes the weight check, but a rate is offered only if a flat-fee condition applies. There is no normal row price to use otherwise.
* A blank cost or literal `0` cost is skipped. Configure free shipping with **Flat fee cost = 0** and the appropriate **Flat rate requires...** rule.
Costs can be a fixed amount or a supported formula. See [weight bands](/integrations/woocommerce/shipping-methods#weight-bands) and [formulas](/integrations/woocommerce/shipping-methods#formulas). The calculation uses cart product weight; enter product weights in WooCommerce before testing.
**Location:** [Shipping method](#settings).
**Default:** **Always disabled**. This decides when **Flat fee cost** replaces the normal weight-row price:
| Choice | Condition |
| - | - |
| **Always disabled** | Always use the normal weight price. |
| **Always enabled** | Always use the flat fee, while availability rules still apply. |
| **A valid free shipping coupon** | A valid applied coupon has **Allow free shipping** enabled. |
| **A minimum order amount** | The qualifying cart amount meets **Minimum order amount**. |
| **A minimum order amount OR a coupon** | Either the amount or coupon condition is met. |
| **A minimum order amount AND a coupon** | Both conditions are met. |
An ordinary discount coupon does not satisfy the free-shipping coupon condition. See [threshold and coupon examples](/integrations/woocommerce/shipping-methods#free-shipping).
**Location:** [Shipping method](#settings).
**Default:** `0`. The numeric cost excluding tax used when **Flat rate requires...** is satisfied. `0` makes this method free; a positive amount gives a fixed replacement price. For example, `15.20` gives 19.00 DKK including 25% VAT. It replaces the weight-row price rather than being added to it.
**Location:** [Shipping method](#settings).
**Default:** `0`. Used only by a minimum-amount, OR or AND rule. The qualifying amount is the cart's **displayed product subtotal after product discounts**, rounded to the store's price decimals. It excludes shipping.
When cart prices display **including tax**, the calculation includes product tax and subtracts both the discount and its tax. With **excluding tax** display, it uses the subtotal and discount excluding tax. A threshold is therefore not unconditionally VAT-inclusive, even though the field's help text mentions VAT. Example: a 500 DKK inclusive subtotal with a 10% product discount qualifies at 450 DKK, so a 500 DKK minimum is not met.
**Location:** [Global](#settings).
**Default:** no service selected. Choose the Smart Send carrier service to use when booking an order that used WooCommerce's native **Free Shipping** method. This maps the booking service; WooCommerce still decides when its free-shipping checkout method is available.
For example, map native Free Shipping to **PostNord: Private delivery to address (MyPack Home)**. See the [complete example](/integrations/woocommerce/shipping-methods#native-free-shipping). This mapping does not add Smart Send's pickup selector to a native method.
## Pickup point delivery
Choose a service that supports customer-selected pickup points. The customer selects a point in checkout. **Select Default** controls automatic initial selection; it does not create a map or choose a service. [Classic and block checkout instructions](/integrations/woocommerce/pickup-points#select-pickup-point).
Use a service that supports customer-selected pickup points. After changing the shipping address or carrier, wait for the new lookup and select a compatible point again if requested.
An empty result or failed lookup can allow checkout to continue without saving a pickup point. Review such an order before booking and select or correct the pickup details in its Smart Send panel. An explicitly invalid or stale selection can instead be rejected and must be corrected. See [pickup-point selection](/integrations/woocommerce/pickup-points#select-pickup-point).
**Location:** [Global](#settings).
**Default:** off. **Enable Select Default** preselects the closest point returned by the pickup lookup. Customers can change it. With the setting off, customers must make a choice when points are available. It requires a customer-selection pickup service; it does not select a shipping method for the customer. See [selection and fallback behavior](/integrations/woocommerce/pickup-points#select-pickup-point).
Choose **List (recommended)**, **List / Map** or **Drop-down** in the global **Pickup point selector** setting. The old **Dropdown format** setting has been removed. Points are labelled with their name, street, postcode and city, with distance when available. See [pickup-point setup](/integrations/woocommerce/pickup-points).
## Booking, labels and customs
Read the message next to the affected field and correct the order or booking details before retrying. Check the selected service, recipient address, required contact details and pickup point. Verify the carrier connection for that service.
For missing weight, enter a usable product weight or the appropriate explicit parcel weight including packaging. For several colli, all order quantities must be allocated correctly. Follow [Colli shipments](/integrations/woocommerce/shipping-labels#colli-shipments) for allocation and measurement validation.
If the outcome is uncertain, inspect the existing booking history before retrying: another booking can create another shipment. A failed document-copy step is not the same as a failed booking.
Open the order’s existing Smart Send booking and use its document link. Downloading or printing that document is different from booking another shipment. [Retrieve labels](/integrations/woocommerce/shipping-labels).
Open the successful booking in the order’s Smart Send history and use its document link. A warning that the label was booked but its local copy could not be saved confirms that the shipment is booked. Use the original document link and ask your administrator to investigate uploads-directory permissions or the download error in the log. Do not book again to recover the PDF. See [labels and documents](/integrations/woocommerce/shipping-labels).
**Location:** [Global](#settings).
**Default:** off. When enabled, the plugin attempts to save a local copy of the generated PDF in WordPress’s uploads folder. The uploads location must be writable. Use the [missing-PDF checks](#documents) if copying fails; a failed copy does not mean the booking failed.
The Smart Send panel updates after booking. WooCommerce’s order-note area uses the native order-note API and may need a full page reload to show the new note. [Booking history and notes](/integrations/woocommerce/shipping-labels#history).
**Location:** [Global](#settings).
**Default:** **Do not change order status**. Choose that option or one of the shop's registered WooCommerce order statuses. The setting changes the order status after a successful outbound booking; it does not wait for paper to emerge from a printer. Return-only booking does not apply this outbound status change.
For example, select **Completed** only if an outbound booking is the point at which you want to complete the order. WooCommerce's own status-change behavior, including configured emails, still applies.
**Location:** [Global](#settings).
**Default:** off. When enabled, the customer's order comment is supplied with the shipment's label-comment information. Its use on the resulting label depends on the carrier service. Use it for relevant delivery instructions, and review the customer's text before [booking](/integrations/woocommerce/shipping-labels).
Edit the product under **Products → Product data → Shipping**. Fill in **Country of origin**, **Customs description**, and **Harmonized Tariff Schedule** (HS code), then update the product. [Product customs guide](/integrations/woocommerce/shipping-labels#customs-information).
Use the advanced parcel controls to allocate the order’s quantities across colli and check each colli’s weight and dimensions. [Colli shipments](/integrations/woocommerce/shipping-labels#colli-shipments) explains the full process and validation.
Bulk printing is coming. The current guide covers booking and retrieving labels for one order at a time. [Book a shipping label](/integrations/woocommerce/shipping-labels).
## Return labels
Configure a valid return service, open the order and click **Create return label**. A return can be booked independently of an outbound shipment. [Return booking](/integrations/woocommerce/return-shipping).
Keep the successful outbound booking. Correct the return error and click **Create return label** to retry only the return. Booking both again can create another outbound shipment. [Partial-success recovery](/integrations/woocommerce/return-shipping).
**Location:** [Shipping method](#settings).
**Default:** no service selected. Choose a return service supported by the carrier/account. It supplies the return service recorded on new orders and does not create a separate checkout option or change the checkout price. Changing this default does not replace the service recorded on existing orders. Follow [Book return shipping](/integrations/woocommerce/return-shipping) for return-only and combined bookings.
**Location:** [Shipping method](#settings).
**Default:** off. When enabled alongside a valid **Return Shipping Method**, the method records the return preference on new orders and preselects **Also create return label** in the booking panel. It does not book a shipment when the customer places the order. The return is attempted after you successfully book the outbound shipment.
Changing the default does not update existing orders. Review the return choice in the booking panel before booking. Creating a return label is separate from refunding a WooCommerce payment. See [return booking and recovery](/integrations/woocommerce/return-shipping).
## Logs, support and customizations
Go to **WooCommerce → Status → Logs** and filter the source to **smart-send-logistics**.
Open the relevant log and locate the time of the failed action. Compare the message, HTTP status and any request identifier with the error you saw.
Enable **Debug Log** in **WooCommerce → Settings → Shipping → Smart Send**, save and reproduce the issue once. Turn it off after collecting the required details. Warnings and errors can still be logged when debug logging is off.
**Location:** [Global](#settings).
**Default:** off. **Enable logging** records diagnostic Smart Send communication and shipping decisions in the WooCommerce logs. Use the field's log link or **WooCommerce → Status → Logs**. Enable it while investigating a problem, reproduce the problem, then review the relevant entries.
This is separate from WooCommerce's **Shipping debug mode**, which bypasses shipping-rate caching and enables checkout diagnostics. See [logging and support information](#logs). Do not share API tokens or customer details in public support reports.
Send the plugin, WooCommerce and WordPress versions; checkout type; exact error and time; affected action; and relevant settings or cart values. Include a short log excerpt when it explains the problem. Remove tokens and unnecessary customer names, addresses and contact details before sharing screenshots or logs.
[Contact Smart Send support](/troubleshooting/support) with those details. Do not send a full API token.
[Developer reference](/integrations/woocommerce/developers) brings together filters and actions with contracts and examples, plugin metadata, and the API for reading an order’s pickup point, shipping methods and bookings. Use the documented hooks to customize the Smart Send plugin in your webshop.
# Get started
Source: https://docs.smartsend.io/integrations/woocommerce/introduction
Install Smart Send for WooCommerce, connect your account, and move on to shipping setup and your first label.
Smart Send connects your WooCommerce store to your carrier accounts. You choose the delivery options and prices at checkout and book shipments from the order page. This guide covers Smart Send 9.
Set up delivery options and shipping prices at checkout.
Let your customers choose a pickup point at checkout.
Book shipments and print labels from the order page.
## Get started quickly
You need administrator access to your WooCommerce store, a [Smart Send account](/fundamentals/account), and the [carrier connection](/fundamentals/carrier-connections) you want to book with.
[Install the plugin](#install-plugin), then [save and validate your API token](#connect-plugin).
[Create a shipping zone and method](/integrations/woocommerce/shipping-methods). Start with one delivery option and check its price and pickup selection with a known cart and address.
Open an order, review its details, then [create and print the shipping label](/integrations/woocommerce/shipping-labels).
## Install the plugin
### Store requirements
| Component | Minimum requirements |
| - | - |
| WordPress | 6.7+ |
| WooCommerce | 10.0+ |
| PHP | 7.4+ |
Use supported releases appropriate for your store; WooCommerce and other extensions may require newer versions than the plugin minimum. Smart Send supports HPOS and traditional order storage, as well as Classic Checkout and the Checkout Block.
### Install and activate
In WordPress administration, go to **Plugins → Add New Plugin** and search for **Smart Send**. Check that the author is **Smart Send ApS**. You can also find the official listing at **Smart Send for WooCommerce** .
Click **Install Now**, then **Activate**. If you have a plugin ZIP, use **Upload Plugin** on the same page, select the ZIP, install it and activate it.
Open **Plugins → Installed Plugins**. The **Smart Send** row should offer **Deactivate**, which indicates that the plugin is active.
Go to **WooCommerce → Settings → Shipping → Smart Send**, or use **Settings** in the plugin row.
If the Smart Send section is missing, confirm that WooCommerce and Smart Send are both active and the store meets the requirements above.
### Compatibility with optional extensions
Smart Send can book shipments without a subscription or tracking extension. Use these details if your store also uses those extensions.
The optional WooCommerce Shipment Tracking extension can receive outbound parcel tracking through its `wc_st_add_tracking_number()` API. Smart Send calls that API when it is available. Return tracking is not sent by default.
The extension supplies its customer-account and email presentation. Check those views with your shop's email templates and status workflow. See [tracking and booking history](/integrations/woocommerce/shipping-labels#shipment-tracking) for the exact handoff.
Smart Send integrates with the renewal-data APIs used by WooCommerce Subscriptions 4.9 and later. The official Subscriptions filter reference describes its renewal lifecycle.
For a renewal, Smart Send keeps reusable delivery configuration while excluding previous booking results and copied Shipment Tracking entries. Where a saved colli allocation exists, it maps the source order lines to the renewal's new order lines. If that mapping cannot be verified, the order requires an explicit allocation reset before booking. The source subscription is left unchanged.
The integration does not book a shipment automatically when a renewal is created. Open and review each renewal order, then [book its label](/integrations/woocommerce/shipping-labels). Review the destination and pickup point, especially when the customer's details have changed.
The renewal integration follows the documented API contracts. End-to-end testing with the licensed WooCommerce Subscriptions renewal engine has not been completed. Verify an initial order and a real renewal in your own staging configuration before relying on the workflow.
See [shipping subscription orders](/knowledge/woocommerce/subscriptions) for the operational workflow.
A coupon discount and payment with stored value are different. Smart Send reads item amounts after WooCommerce's line discounts and uses order totals when preparing shipment values.
WooCommerce Gift Cards redemptions are not currently added back to the shipment-level value. A gift-card-paid order can therefore produce a shipment value below the value of its goods. Do not assume the booking value is correct for customs or value-dependent carrier services; verify and resolve it before booking.
Support for a specific store-credit or voucher extension cannot be inferred from ordinary WooCommerce coupon support. Check its order representation, shipping thresholds and booked values. See [gift cards, coupons and credit](/knowledge/woocommerce/gift-cards-coupons-and-credit).
Extensions can change shipping rates, addresses, currencies, order numbers, emails or checkout rendering. Using the WooCommerce APIs does not guarantee every combination works. Verify the complete checkout-to-booking flow with the actual extensions and theme used by your store, including both guest and signed-in checkout where relevant.
If a combination fails, use [troubleshooting](/integrations/woocommerce/faq) to collect the versions, steps and relevant logs. Developers can use the [documented extension points](/integrations/woocommerce/developers).
## Connect the plugin
Use an API token for your Smart Send account. Check that the relevant [carrier connection](/fundamentals/carrier-connections) is configured before booking a shipment.
### Save and validate your API token
Follow [creating an API token](/api-reference/authentication#creating-an-api-token). Give the token a name that identifies your shop and copy it when it is displayed. Treat it like a password.
Open **WooCommerce → Settings → Shipping → Smart Send**. Paste the token into **API Token**, then click **Save changes**.
Click **Validate API Token**. The plugin checks the saved token, so save any edits before clicking the button.
A successful response starts with **API Token verified** and identifies the connected account. If validation fails, check the displayed reason, replace an invalid or revoked token, save and validate again. See [connection troubleshooting](/integrations/woocommerce/faq#connection).
The screenshots use a fictional token. Enter your own token; the example cannot connect a shop.
### Test the three parts separately
| Check | What to do | What it proves |
| - | - | - |
| Connection | Save the token and click **Validate API Token**. | Smart Send accepts the credentials and returns account information. No shipment is booked. |
| Checkout | Configure zones and methods, then test a cart and delivery address. | The expected methods, prices and pickup selection work for that cart and address. |
| Booking | Open an order and book the intended service. | The booking service accepts the shipment data and returns its result and documents. |
Booking with your normal account creates a real shipment. A staging WordPress site alone does not make Smart Send bookings simulated. Only perform a booking test when you intend to create that shipment or a developer has explicitly configured an appropriate test environment.
#### Check checkout before your first booking
Create the [shipping zones](/integrations/woocommerce/shipping-methods#shipping-zones) and [methods](/integrations/woocommerce/shipping-methods) you need.
Add a physical product with a known weight. Enter an address in your intended zone and check the delivery title and total against your configuration. Try a second address if you have overlapping zones.
If the service lets the customer choose a pickup point, select one and confirm that the completed order contains the intended choice. See [pickup points](/integrations/woocommerce/pickup-points) for your checkout type.
Open the order and check the Smart Send service, recipient and pickup details. When you are ready to create the shipment, follow [book a shipping label](/integrations/woocommerce/shipping-labels).
Developers can find environment configuration under [sandbox configuration](/integrations/woocommerce/developers#smart-send-api-endpoint). Token validation does not verify carrier credentials, product customs information or every possible checkout rule.
## Next steps
Set up zones, prices and pickup points with worked examples.Book from an order and download your shipping label.
Find settings and troubleshooting in the [FAQ](/integrations/woocommerce/faq). Developers can use [Developer reference](/integrations/woocommerce/developers).
# Pickup points
Source: https://docs.smartsend.io/integrations/woocommerce/pickup-points
Set up pickup-point delivery in WooCommerce and let customers choose where their parcel is delivered.
A pickup point is a shop or parcel locker where your customer collects their parcel. Your customer can choose a location that fits their day, such as one near home or work, without needing to be home for delivery.
## Set up a shipping method first
You need a connected Smart Send account and a shipping method with a service that supports customer-selected pickup points.
Learn how to add a shipping method through the Smart Send plugin and enable pickup points for it.
In the method's **Shipping Method** field, distinguish these services:
| Service | Who chooses the pickup point? |
| - | - |
| **Select pickup point**, for example **PostNord: Select pickup point (MyPack Collect)** | The customer chooses at checkout. Use this to offer the selector described below. |
| **Closest pickup point** | The carrier chooses. The customer does not see a pickup-point selector. |
| Home/address delivery | The parcel goes to the recipient address. No pickup-point selector is shown. |
## Choose how pickup points are shown
The plugin can show pickup points in different ways on the checkout page. Read about the options below.
Customers see nearby pickup points in a list with names, addresses, distances and opening hours when available. They can search by postcode and browse more points, but cannot switch to a map.
We recommend the list for most shops. It makes points easy to compare without loading map JavaScript. Choose **List (recommended)** under **Pickup point selector**.
Customers start with the list and can switch to a map to find a pickup point in their preferred area. Choose **List / Map** to offer both options. Map JavaScript loads only when the customer opens the map.
Customers choose a pickup point in a simple drop-down field with names and addresses. There is no search, paging or map.
Choose **Drop-down** for minimal JavaScript or if your theme does not work well with the list. Customers have fewer ways to compare points.
## Configure pickup points
Add a [shipping method as usual](/integrations/woocommerce/shipping-methods#shipping-method) and choose a pickup-point service that supports customer selection, such as **Select pickup point**. Smart Send then automatically displays pickup points at checkout once the customer enters their shipping address and selects that method.
### Pickup-point display settings
Go to **WooCommerce → Settings → Shipping → Smart Send** and find **Pickup Points**. These settings apply to all Smart Send shipping methods in your shop.
| Setting | Meaning |
| - | - |
| **Pickup point selector** | Choose **List (recommended)**, **List / Map** or **Drop-down** as described above. List is the default. |
| **Pickup points per page** | Number of points per list page. Defaults to **5**, with values from **1** to **100**. For the drop-down, this is the total number of choices because there is no paging. |
| **Select Default** | Enable to preselect the closest returned point. Customers can still choose another. Off by default, so customers must choose when points are available. |
| **Google Maps API key** | Used with **List / Map**. We recommend a Google Maps API key; without one, the map uses OpenStreetMap. See [creating and restricting the key](#google-maps-key). |
Click **Save changes** and check the presentation in your checkout.
## How customers choose at checkout
The plugin first finds the nearest pickup points using the shipping address entered by the customer. Most customers simply choose one of these points.
Customers who prefer another point can search by postcode in the list. If you offer the map, they can also navigate to their preferred area, press **Search this area** and select a point directly from the map. The drop-down only shows nearby points and has no search.
## Google Maps API key
This section applies when **Pickup point selector** is set to **List / Map**. The map works without a key, using OpenStreetMap.
We recommend creating a Google Maps API key and entering it in **Google Maps API key**, so your shop's maps are served under your own Google Cloud account.
The key is public. It is sent to the customer's browser and can be read by anyone who visits your checkout. Restricting the key to your own domains is what protects it, not keeping it secret. Never paste a key that is also used for server-side Google APIs into this field.
### Create and restrict the key
Three things have to be in place before a key draws a map: the right API, billing, and the restrictions below. Start at the **Google Cloud Console** .
A project is the container that owns the key and its billing. Use one project for your shop.
Go to **APIs & Services → Library**, search for **Maps JavaScript API** and enable it. It is the only API the checkout map uses. A key without it fails with `ApiNotActivatedMapError`.
Go to **Billing** and link a billing account to the project. Google requires one even for usage inside the free allowance. Without billing the map stays grey and the browser console shows `BillingNotEnabledMapError`.
Check the current allowance and prices in **Google's usage and billing documentation** . Usage is billed to your Google Cloud account.
Go to **APIs & Services → Credentials**, choose **Create credentials → API key** and copy the key. See **Google's own instructions** if the console looks different from this.
You must restrict the key to your shop's website address before using it. Open the key and set **Application restrictions** to **Websites**. Add your shop's domains as HTTP referrers, for example `https://example.com/*` and `https://www.example.com/*`. Add your staging domain too if you test there. A domain that is missing fails with `RefererNotAllowedMapError`.
Set **API restrictions** to **Restrict key** and select **Maps JavaScript API** only. A key limited to the wrong API fails with `ApiTargetBlockedMapError`.
Paste the key into **Google Maps API key** under **WooCommerce → Settings → Shipping → Smart Send** and click **Save changes**. Then open your own checkout, choose a pickup point method and press **Map**.
The customer's browser contacts Google when the map opens, and the shop's domain and the map requests go with it. Make sure your cookie and consent policy covers it. The same applies to OpenStreetMap when no key is set.
### If the map does not appear
Open your checkout, press **Map** and look at the browser console. Google names the reason, and **Google's error message reference** lists them all.
* `BillingNotEnabledMapError` - the project has no billing account.
* `ApiNotActivatedMapError` - the Maps JavaScript API is not enabled for the project.
* `RefererNotAllowedMapError` - the shop's domain is not in the key's website restrictions. Check `www` and non-`www` separately.
* `ApiTargetBlockedMapError` - the key's API restrictions exclude the Maps JavaScript API.
* `InvalidKeyMapError` - the key is mistyped or belongs to a deleted project.
When Google refuses the key, the customer still gets a working map: the plugin falls back to OpenStreetMap for the rest of that visit, and the shop gets a notice in the WordPress admin.
## Find the choice on the order
After checkout, the saved point is visible in the order's **Smart Send** panel, customer order details and the order emails that include WooCommerce order details. Check that the saved name and address match the customer’s choice.
Review the point before [booking the outbound shipment](/integrations/woocommerce/shipping-labels). The order panel also lets you change the point when needed.
# Return shipping
Source: https://docs.smartsend.io/integrations/woocommerce/return-shipping
Book return labels from a WooCommerce order, separately or with outbound labels, and retrieve their documents.
Create a return label from the order's **Smart Send** panel, independently or together with its outbound shipment. You need a [connected plugin](/integrations/woocommerce/introduction#connect-plugin) and a [carrier account](/fundamentals/carrier-connections) with a service that supports the return route. Review the order's addresses, items and weights before booking. Creating a return label does not issue a WooCommerce refund.
The order's **Return method** comes from the return configuration recorded when the order was placed. Use **Return method → Edit** to choose the service for this booking. To set the service and automatically include return labels by default for future orders, see the [automatic return label setting](/integrations/woocommerce/faq#auto-generate-return-label). Changing the zone's defaults does not rewrite existing orders.
## Book only a return label
Open **WooCommerce → Orders**, select the order, and find **Smart Send**. Review the addresses, items and parcel weight.
Check **Return method**. Click **Edit** to select a suitable return service if it is missing or needs changing.
Click **Create return label**. You do not need to book an outbound shipment first or enable **Also create return label**.
Check for the successful **Return shipment** result and click **Download return label (PDF)**. Supply that document to the customer according to your returns process.
The order panel uses the order's items and parcel configuration. The return action is not a selector for returning only selected order-line quantities. Handle refund decisions separately in WooCommerce.
## Book outbound and return together
Check **Shipping method**, **Pickup point** where applicable, **Return method**, and **Parcels**.
Check **Also create return label**, then click **Create shipping label**.
The outbound booking runs first. When it succeeds, Smart Send attempts the return. Confirm that both **Shipment** and **Return shipment** succeeded, then download each document from its own result.
The outbound and return are separate shipments. Keep their labels distinct when preparing the package. The current parcel allocation and entered measurements are used for both legs in a combined booking.
## Find or print the documents again
After a full page reload, open **Order notes** for the document links, or use **Booked shipments** to open the shipment in Smart Send. See [tracking and booking history](/integrations/woocommerce/shipping-labels#history).
Booking another return requires confirmation when one already exists. **Yes, create another** creates an additional return shipment; it does not cancel an existing label. For general return-policy considerations, see [returns](/features/return).
# Booking shipments
Source: https://docs.smartsend.io/integrations/woocommerce/shipping-labels
Book WooCommerce shipments using your carrier account, retrieve labels and tracking, prepare customs information, and manage advanced Colli shipments.
Smart Send books shipments using your own [carrier account and agreement](/fundamentals/carrier-connections). Connect that account to Smart Send and [connect the plugin](/integrations/woocommerce/introduction#connect-plugin) before booking. The carrier invoices the shipping under your agreement; the price you charge the customer at checkout is set separately in your [shipping methods](/integrations/woocommerce/shipping-methods).
## Booking from the order page
Start with one order in one parcel. Review the delivery address and product weights before booking. If the order needs several packages or a manual packed weight, use [Colli shipments](#colli-shipments) below. [Return shipping](/integrations/woocommerce/return-shipping) has its own booking procedure.
**Create shipping label** creates a shipment with the selected carrier. Use it when you intend to book; validating an API token or reviewing checkout does not create a shipment.
### Book a shipping label
Go to **WooCommerce → Orders**, open the order, and find **Smart Send**. Check the recipient's address in the WooCommerce order.
Check **Shipping method** and, for a pickup-point service, **Pickup point**. Use [Edit to change the service](#method-change) or [look up a different pickup point](#pickup-edit) if needed. Check that **Parcels** shows one parcel with a usable weight. Leave **Also create return label** unchecked for an outbound label only.
Click **Create shipping label** and wait for the result. If a validation error appears, correct the indicated address, service, pickup point or parcel field before retrying.
A successful result shows **Shipment**, its shipment reference, and the documents returned by the carrier. Click **Download shipping label (PDF)** to open or download the label, then print it. **Open** opens the shipment in Smart Send.
### Download an existing label
While the result is visible, use its document links. After reloading or reopening the order, use the links in **Order notes**, or open the shipment from **Booked shipments** in the Smart Send panel. See [booking history and order notes](#history).
Downloading or printing an existing document does not create a new shipment. The PDF does not need to open automatically for a booking to have succeeded. For printer setup, see [printing](/fundamentals/print-setup).
### Booking history and tracking
Under **Booked shipments** in the **Smart Send** panel, select an outbound or return entry to open it in Smart Send. Several entries can exist if you booked more than once. You can also find them in **Smart Send shipments** .
Use the tracking link in the result or order note, where supplied by the carrier. A booked label confirms the booking; it does not mean the carrier has collected or delivered the package. This history lists bookings, not live carrier events. Open the tracking link for delivery progress as the carrier reports it. See [Smart Send tracking](/features/tracking) for the wider service.
#### Order notes after reloading
The immediate result in the Smart Send panel appears as soon as the booking finishes. WooCommerce's **Order notes** area shows the new private booking note after a full page reload. Save any unrelated unsaved order edits before reloading.
The note contains document links and available tracking details. It is a private administrative note, not a customer notification.
#### Optional WooCommerce Shipment Tracking integration
When the separate WooCommerce Shipment Tracking extension is active and exposes its tracking API, Smart Send passes each outbound parcel's tracking number, carrier name and tracking URL to it after booking. Return bookings are not passed to this extension by default.
The extension controls how those tracking entries appear in customer accounts and supported order emails. Its documented tracking API describes that handoff. Check the extension's settings and your email templates before relying on a particular customer-facing display.
Smart Send saves tracking before applying **Set order status after label print**. A configured status change may trigger WooCommerce emails; booking a label alone is not a promise that a customer email was sent. Verify the actual email and account view with your shop's configuration.
#### If tracking information is missing
* **No new order note:** reload the full order page after the booking completes.
* **No tracking information:** check the successful booking result and shipment in Smart Send; only tracking returned by the carrier can be shown.
* **A tracking link has no carrier events yet:** distinguish label creation from the carrier's first scan.
* **No tracking in customer email/account:** confirm the optional extension is active, the tracking entry exists, and the relevant email or template includes it.
See [frequently asked questions](/integrations/woocommerce/faq) for logs and the information to send support.
### Choose a different service for this booking
Click **Edit** beside **Shipping method** and select the required carrier service. This overrides the service for the current booking; it does not change the customer's shipping charge or permanently replace the order's shipping method.
If the order used another WooCommerce method, select a Smart Send service here before booking. For WooCommerce's native **Free Shipping**, you can also configure a [default booking service](/integrations/woocommerce/shipping-methods#native-free-shipping).
### Change the pickup point
For a customer-selected pickup service, click **Edit** beside **Pickup point**, enter the pickup-point number, and click **Look up**. Review the returned name and address before booking. The point must belong to the selected carrier and the order's destination country.
A successful lookup displays the chosen point. The submitted change is saved on the order after a successful booking; looking up a point alone does not save it.
### Book again
If a shipment has already been booked in the same direction, the panel asks for confirmation. **Yes, create another** creates an additional shipment. It does not cancel the earlier shipment. Use an existing document link when you only need another printout.
### Booking settings
In **WooCommerce → Settings → Shipping → Smart Send**:
| Setting | Effect |
| - | - |
| **Set order status after label print** | Changes the order status after successful outbound booking, even before you physically print. **Do not change order status** leaves it unchanged. Return-only booking leaves the status unchanged by default. |
| **Include order comment on label** | Supplies the customer's order comment as label free text. Its presentation depends on the carrier. This is separate from the private booking note added to WooCommerce. |
| **Save a copy of the PDF** | Saves a document copy in WordPress uploads and uses its link when successful. If copying fails, the shipment can still be booked and its original document link remains available. |
If you see a warning that a local copy could not be saved, use the original link and investigate the WordPress upload problem. Do not book again just to obtain the PDF. See [plugin settings](/integrations/woocommerce/faq#save-pdf) and [frequently asked questions](/integrations/woocommerce/faq).
Bulk printing is coming. This guide covers booking and printing from an individual order.
## Customs information
Smart Send reads customs information from your products when preparing a shipment. Enter accurate origin, goods description and tariff classification before booking on a route that requires a customs declaration. You need permission to edit products.
For route requirements and the rest of the declaration, see [international shipping](/knowledge/international-shipping/introduction) and [understanding customs](/knowledge/international-shipping/understanding-customs).
### Add product customs information
Go to **Products**, edit the product, and open **Product data → Shipping**. Smart Send's customs fields are in this tab.
In **Country of origin**, select the country where the goods were produced. This can differ from the country your shop ships from.
Enter a clear **Customs description**, such as **Cotton T-shirt**. Enter the product's HS code in **Harmonized Tariff Schedule**. Determine the correct tariff code for your actual goods and destination; do not copy the example solely because your product has a similar name.
Click **Update**, reopen **Shipping**, and verify the saved values. Repeat for the other products you ship internationally.
#### Example
The screenshot uses a synthetic cotton T-shirt produced in Denmark, the description **Cotton T-shirt**, and **61091000** as its example code. These values illustrate where to enter data; they do not determine the classification or origin of your product.
### Product variations
For a variation, Smart Send uses a customs value stored on the variation when one exists. If it is empty, Smart Send falls back to that field on the parent product. Fill in the parent product's **Shipping** fields for values shared by its variations. The plugin does not add a separate set of customs controls to each variation's editor.
### When you book
The plugin supplies the product's customs description, HS code and country of origin with the order's item information. Origin and HS code alone do not guarantee a complete declaration: the route and carrier can also require other shipment, value or sender information.
If a booking reports missing or invalid customs data, correct the product fields and any other information named in the error before retrying. A deleted catalog product cannot supply its customs metadata. Also review [gift-card valuation limitations](/integrations/woocommerce/introduction#gift-cards) if the order was paid with a gift card.
After saving the product information, return to [booking from the order page](#booking-from-order-page).
## Colli shipments
Use this advanced workflow when one order needs several physical packages, or when you need to enter a packed weight and dimensions. Each package is one **colli** in the shipment. Check the order quantities, product weights and carrier limits before editing.
The editor allocates the entire order; it does not select only part of the order for shipment.
### Open the colli editor
In **WooCommerce → Orders**, open the order and find **Smart Send → Parcels**. The summary shows the number of parcels and total weight. Click **Edit** to open the controls. The interface calls the individual colli **Box 1**, **Box 2**, and so on.
### Allocate items to colli
Example: ship three units of one product as two units in the first colli and one in the second.
Open **Parcels → Edit**. For a new allocation, all three units are in **Box 1**.
Click the down arrow beside the product once. It moves one unit to **Box 2**, creating that box when needed. The first box now contains two units; the second contains one.
Each arrow moves one unit. Use the up arrow to move one back. A box is removed when its last unit moves out, and the remaining boxes are renumbered. Every order unit must appear in exactly one box.
Check the weights and measurements below. Click **Done** to collapse the editor, review the summary, then use the appropriate label button to book. **Done** alone does not book or persist the allocation.
### Weights and dimensions
Leave **Weight (kg)** empty to use the sum of the allocated products' weights. The placeholder shows that calculated weight. This automatic calculation does not add packaging unless a developer has configured that behavior.
Enter a weight to use the colli's measured total, including its packaging. Enter the external length, width and height in **L (cm)**, **W (cm)** and **H (cm)** when needed for the service. The editor uses **kg and cm**, regardless of the store's product measurement units.
| Example colli | Contents | Automatic weight | Entered packed weight | L × W × H |
| - | - | - | - | - |
| Box 1 | 2 units at 1 kg each | 2 kg | 2.3 kg | 40 × 30 × 20 cm |
| Box 2 | 1 unit at 1 kg | 1 kg | 1.2 kg | 30 × 20 × 10 cm |
With these manual weights, the summary shows a total of **3.5 kg**.
### What is saved
| Value | After a successful booking |
| - | - |
| Allocation of order-line quantities to colli | Saved on the order for later bookings. |
| Submitted pickup-point change | Saved on the order. |
| Manually entered weight and dimensions | Used for this booking; re-enter them after reloading if needed. |
| Shipping or return service chosen in the order panel | Used for this booking; does not rewrite the order's original method defaults. |
A failed booking does not save the submitted allocation or pickup change. In a combined outbound-and-return booking, a successful outbound leg can already have saved them even if the return fails. Both legs use the current entered measurements. See [return booking recovery](/integrations/woocommerce/faq#partial-return).
### Fix allocation or weight errors
**Reset required** means the saved allocation no longer matches the current order, for example after its quantities changed. Click **Reset to one parcel**, then allocate the current items again. Reset also clears the editor's entered weights and dimensions, so review those before booking.
If a catalog product is unavailable, the item is shown as **Deleted** with no SKU. Its order quantity remains, but Smart Send cannot calculate a weight from that product. Enter a usable total weight for each affected colli. For other weight errors, check the product weights or enter the packed total required by the carrier.
# Configure shipping methods
Source: https://docs.smartsend.io/integrations/woocommerce/shipping-methods
Set up WooCommerce shipping zones and Smart Send methods, and choose a worked pricing and availability configuration.
A Smart Send shipping method connects the customer's checkout choice to the carrier service used when you book the order. Set up zones, add methods, then verify the customer's choices and prices with an example that matches your shop.
You need a [connected Smart Send account](/integrations/woocommerce/introduction#connect-plugin) and access to the relevant carrier services. Follow [shipping zones](#shipping-zones), [shipping methods](#shipping-method), then the [worked examples](#examples).
## Set up shipping zones
A shipping zone determines which shipping methods are available for a delivery address. Zones are **standard WooCommerce functionality**. Smart Send supplies the methods you add inside a zone.
Before you start, check **WooCommerce → Settings → General → Shipping location(s)** allows the countries you intend to serve. Complete the [Smart Send connection](/integrations/woocommerce/introduction#connect-plugin) before adding Smart Send methods.
### Create a zone
Go to **WooCommerce → Settings → Shipping → Shipping zones** and click **Add zone**.
Enter a **Zone name**, for example `Denmark`, and select **Denmark** in **Zone regions**. The name helps you recognize the zone in the administration screen.
For a broader zone called `Nordic countries`, select **Denmark**, **Sweden**, **Norway** and **Finland**.
Click **Limit to specific ZIP/postcodes** if the zone should cover only part of its regions. For a zone restricted to postcode `2300`, enter `2300`. Leave the restriction empty for the whole selected region.
Click **Add shipping method** and follow [Add a Smart Send method](#shipping-method). Save the method and click **Save changes** in the zone editor.
An enabled method still needs to meet its weight and availability rules before a customer can choose it.
### The first matching zone wins
WooCommerce checks zones from top to bottom and uses the **first zone that matches the customer's shipping address**. It uses one zone; methods from overlapping zones are not combined. Put the more specific zone first.
| Order | Zone | Countries |
| - | - | - |
| 1 | Denmark | DK |
| 2 | Nordic countries | DK, SE, NO, FI |
With this order, an address in Denmark uses the methods in **Denmark**. Addresses in Sweden, Norway and Finland use **Nordic countries**. Move Nordic countries above Denmark and Danish customers match the Nordic zone instead.
To change the order, return to **Shipping zones**, drag the handle to the left of a zone name, and click **Save changes**. This order controls zone matching. The order of methods *inside* a zone controls their display order, unless [Sort shipping methods](/integrations/woocommerce/faq#sort-shipping-methods) is enabled.
### Addresses outside your zones
WooCommerce's fallback zone, **Rest of the world**, applies only when the address matches none of your configured zones. Add methods there only for destinations you want to serve.
A matched zone with no available methods does not fall through to a broader zone or the fallback zone. Check the matched zone's enabled methods and their conditions if checkout says no shipping is available.
### Check the result
Add a physical product to the cart and enter a complete Danish delivery address in checkout. Confirm that Denmark's methods appear. Repeat with a Swedish address to check the Nordic zone. This checks checkout availability; it does not book a shipment.
Continue with [shipping methods](#shipping-method), or troubleshoot [missing methods](/integrations/woocommerce/faq#no-shipping-methods). For the full native zone controls, see **WooCommerce's shipping zones guide** .
## Configure a Smart Send shipping method
### Understand the three choices
| Setting | What it controls | Example |
| - | - | - |
| **Method Title** | The name customers see at checkout. | `Pickup point` |
| **Shipping Method** | The carrier service stored with the order for booking; it also determines whether checkout requests a pickup point. | **PostNord: Select pickup point (MyPack Collect)** |
| **Cost based on weight** and flat-fee rules | The shipping amount you charge the customer. | 31.20 DKK excluding VAT gives 39.00 DKK with 25% VAT. |
The checkout price is your configured price. Selecting a carrier service does not replace it with a live carrier quote. Renaming the title does not change the service.
### Add and configure the method
Go to **WooCommerce → Settings → Shipping → Shipping zones** and edit the zone that should offer this service.
Click **Add shipping method**, select **Smart Send**, and click **Continue**. Open the newly added method's **Edit** action.
Enter a clear **Method Title**. Choose the actual carrier service in **Shipping Method**. For a customer-selected pickup point, choose a service named **Select pickup point**. For home delivery, choose the appropriate address-delivery service.
Set **Tax status** to **Taxable** when your WooCommerce tax configuration should add shipping tax, or **None** when this method should not be taxed.
Set the **Minimum**, **Maximum** and **Cost** in **Cost based on weight**. Bounds use the weight unit configured in WooCommerce; costs are entered excluding tax.
For an unrestricted single price, leave both weight bounds empty. Enter `31.20` for pickup costing 39.00 DKK including 25% VAT. Keep **Flat rate requires...** set to **Always disabled** unless you want a free or reduced-price rule.
Use the [worked examples](#examples) for thresholds, weight bands, formulas and advanced availability. Configure return services using the separate [return-shipping guide](/integrations/woocommerce/return-shipping).
Click **Save changes**. Return to the zone and confirm that the method is enabled. Add another Smart Send method if you also want home delivery or another carrier.
Add a physical product with a saved weight to the cart. Enter a complete delivery address covered by the zone, then check the title, price and any pickup selector. Repeat with a cart that should fall outside your conditions.
Saving or choosing a checkout method does not book shipping. [Booking an order](/integrations/woocommerce/shipping-labels) is a separate action.
### Pricing and availability are different
A free/reduced-price rule replaces the normal weight-row price when its condition is met. It does **not** override the matching zone, disabled methods, weight coverage, shipping-class conditions or excluded customer roles.
For a missing method, first check the [first matching zone](#first-matching-zone), then the [weight table](/integrations/woocommerce/faq#weight-prices) and [advanced settings](/integrations/woocommerce/faq#advanced-settings). Use [troubleshooting](/integrations/woocommerce/faq#no-shipping-methods) if the result is still unexpected.
See the [settings reference](/integrations/woocommerce/faq#method-settings) for every field, its default and its effect.
Let customers choose a pickup point at checkout. Compare list, map and drop-down views, and configure the selector for your shop.
## Worked examples
### Common test setup
All monetary examples use **DKK**, **kg**, Danish delivery to postcode **2300**, **25% VAT** on products and shipping, prices entered **excluding tax**, and cart/checkout prices displayed **including tax**. Each physical product costs **100.00 DKK excluding VAT = 125.00 DKK including VAT** and weighs **1 kg**. There are no discounts unless specified. Shipping methods are enabled and **Tax status = Taxable**.
Enter the costs below in each method's **Cost based on weight → Cost** field. The screenshots use a fictional shop and pickup points; use your own account's available services. A checkout test does not book shipping.
Add two Smart Send methods to the Denmark zone:
| Setting | Pickup method | Home method |
| - | - | - |
| **Method Title** | `Pickup point` | `Home delivery` |
| **Shipping Method** | **PostNord: Select pickup point (MyPack Collect)** | **PostNord: Private delivery to address (MyPack Home)** |
| Weight-row **Minimum / Maximum** | Both empty | Both empty |
| Weight-row **Cost**, excluding VAT | `31.20` | `47.20` |
| **Flat rate requires...** | **Always disabled** | **Always disabled** |
| **Advanced Settings** | Off | Off |
Save each method. For the same initial selection as the screenshot, put home delivery first in the zone and leave automatic cost sorting off.
Add one product and enter the Danish address. Checkout offers **Pickup point: 39.00 DKK** and **Home delivery: 59.00 DKK**. Home delivery gives an order total of **184.00 DKK**.
Choose pickup and a point. The order total becomes **164.00 DKK**: 125.00 for goods plus 39.00 shipping.
Use the same **DKK/kg/25%-VAT** setup and pickup method above. Change these settings:
| Setting | Value |
| - | - |
| Normal weight-row **Cost** | `31.20` excluding VAT; no weight bounds |
| **Flat rate requires...** | **A minimum order amount** |
| **Flat fee cost** | `0` |
| **Minimum order amount** | `500` |
| **Advanced Settings** | Off |
Save and put four products in the cart. Their subtotal is **500.00 DKK including VAT**. Choose pickup: the shipping line has no charge, and the total stays **500.00 DKK**. Three products give a 375.00 DKK subtotal, so pickup still costs 39.00 DKK and the total is 414.00 DKK.
#### Apply a discount
Create a WooCommerce **Percentage discount** coupon of `10` and apply it to all four products. Leave **Allow free shipping** unchecked. Goods now cost **450.00 DKK including VAT**, below the 500 minimum. Pickup costs **39.00 DKK**, and the total is **489.00 DKK**.
The threshold uses the displayed subtotal after discounts, not the amount before the coupon. See the precise [tax and discount basis](/integrations/woocommerce/faq#minimum-order-amount) before adapting the example to a shop displaying prices excluding VAT.
#### Choose OR or AND
To make the coupon itself qualify for free shipping, enable **Allow free shipping** on a valid coupon and save it. For the results below, apply a 10% coupon with that option enabled, keep the minimum at `500`, and change **Flat rate requires...** as shown:
| Cart | Qualifying amount after discount, including VAT | Rule | Pickup charge including VAT | Total including VAT |
| - | - | - | - | - |
| 4 products, 4 kg | 450.00 | **A minimum order amount OR a coupon** | 0.00 | 450.00 |
| 4 products, 4 kg | 450.00 | **A minimum order amount AND a coupon** | 39.00 | 489.00 |
| 5 products, 5 kg | 562.50 | **A minimum order amount AND a coupon** | 0.00 | 562.50 |
**OR** accepts the qualifying coupon even below the amount. **AND** requires both. Choosing **A valid free shipping coupon** uses only the coupon condition. An ordinary discount coupon does not qualify merely because it reduces the price.
A free-price condition does not make an otherwise unavailable method appear. Weight coverage, shipping-class rules and excluded roles still apply. If you want a reduced rate instead, use a positive **Flat fee cost**, such as `15.20` excluding VAT for 19.00 DKK including 25% VAT.
Use **DKK/kg/25% VAT**, disable the flat-fee rule, keep advanced settings off, and enter these rows for the pickup method in this order:
| Minimum, kg | Maximum, kg | Cost excluding VAT | Checkout price including VAT |
| - | - | - | - |
| `0` | `5` | `31.20` | 39.00 DKK |
| `5` | `20` | `47.20` | 59.00 DKK |
| Cart weight | Result for this method |
| - | - |
| 0 kg | First row: 39.00 DKK including VAT. A missing product weight is therefore not a reliable availability restriction. |
| 4 kg | First row: 39.00 DKK including VAT. |
| Exactly 5 kg | Second row: 59.00 DKK including VAT. |
| 19 kg | Second row: 59.00 DKK including VAT. |
| Exactly 20 kg or more | Method unavailable; no row covers the weight. |
Five products weigh 5 kg and cost 625.00 DKK including VAT. Pickup is **59.00 DKK**, so the total with pickup is **684.00 DKK**. The home method from the first example remains independently priced at 59.00 DKK; it is selected in the screenshot.
Do not use `0` as a maximum to mean “up to zero”: empty and literal zero bounds are unrestricted. Avoid overlaps: if you change the first maximum to `10`, a 5 kg cart matches both rows and the last matching priced row wins. See [all weight-table rules](/integrations/woocommerce/faq#weight-prices).
Keep **DKK/kg/25% VAT** and the unrestricted pickup price of 31.20 DKK excluding VAT; disable the flat-fee rule. Create the WooCommerce class `Standard parcels`, assign it to a 1 kg product, and leave another 1 kg product without a class. Each costs 125.00 DKK including VAT. Add one of each to make a 2 kg mixed cart.
Enable **Advanced Settings**. Select **Standard parcels** in **Shipping classes**, leave **Exclude User role** empty, and compare:
| **Display shipping method if...** | Standard-only cart | Mixed cart | Cart with only the unclassified product |
| - | - | - | - |
| **ALL products belong to one of the shipping classes** | Shown | Hidden | Hidden |
| **At least ONE product belongs to one of the shipping classes** | Shown | Shown | Hidden |
| **ALL products do NOT belong to one of the shipping classes** | Hidden | Hidden | Shown |
| **At least ONE product does NOT belongs to one of the shipping classes** | Hidden | Shown | Shown |
When shown, the pickup method still costs **39.00 DKK including VAT**. These rules decide availability, not a surcharge per shipping class. Virtual products that do not need shipping do not participate in the class check.
The screenshot uses the **ALL products belong** rule with a single Standard parcels product and excludes the Administrator role. A guest qualifies and sees pickup at 39 DKK alongside home delivery at 59 DKK.
Use **DKK/kg/25% VAT**, one 1 kg product, pickup price 31.20 DKK excluding VAT, no flat-fee rule, and **Advanced Settings = enabled**. Set the shipping-class rule to **N/A** so this test only checks roles.
| **Exclude User role** selection | Guest checkout | Logged-in user with only the Customer role |
| - | - | - |
| Nothing selected | Method shown at 39 DKK | Method shown at 39 DKK |
| **Guest** | Method hidden | Method shown at 39 DKK |
| **Customer** | Method shown at 39 DKK | Method hidden |
Test guest behavior in a private browser window. An administrator's logged-in session is not a customer-role test. If a user has several roles, matching any excluded role hides the method. Turning **Advanced Settings** off stops applying both role and class restrictions.
Use the same **DKK/kg/25%-VAT** product and Danish address. This example gives a one-product cart free home delivery:
In the Denmark zone, add **Free Shipping**, choose **Free shipping requires → No requirement**, and save. This makes the native method available without an amount or coupon condition for the example.
Go to **WooCommerce → Settings → Shipping → Smart Send**. Set **Shipping method used for WooCommerce method Free Shipping** to **PostNord: Private delivery to address (MyPack Home)** and save.
Choose the native Free Shipping option for one product. Shipping is free and the total is **125.00 DKK including VAT**. When that order is opened for booking, Smart Send resolves the mapped home-delivery service. Creating the order itself does not book it.
The mapping does not replace native WooCommerce availability rules or add the pickup selector. To offer a customer-selected pickup point with free shipping, use a **Smart Send** method with the zero flat-fee rule instead.
Formulas go in a weight row's **Cost** field. Use the same **DKK/kg/25%-VAT** setup, an unrestricted weight row, **Flat rate requires... = Always disabled**, and no advanced restrictions. In this example, three products weigh 3 kg and have a package contents cost of **300.00 DKK excluding VAT**, with no discount.
| Cost formula | Calculation | Shipping excluding VAT | Shipping including VAT |
| - | - | - | - |
| `10 * [qty]` | 10 × 3 physical units | 30.00 | 37.50 |
| `0.10 * [cost]` | 10% × 300.00 | 30.00 | 37.50 |
| `[fee percent="10" min_fee="20" max_fee="40"]` | 10% of 300.00, bounded between 20 and 40 | 30.00 | 37.50 |
`[qty]` is the quantity of items requiring shipping in the package. `[cost]` is that package's item cost after product discounts and excluding tax. `[fee ...]` already calculates a monetary percentage fee; do not multiply it by `[cost]` again.
For the same fee expression, one 1 kg product at 100.00 DKK excluding VAT gives the **20.00 DKK minimum fee** (25.00 including VAT). Five such products give the **40.00 DKK maximum fee** (50.00 including VAT). Shipping tax is applied after evaluating the formula. Use the weight rows to vary prices by weight.
Save the method, refresh checkout and verify the resulting amount. If the result differs, check the [settings reference](/integrations/woocommerce/faq) and [rate troubleshooting](/integrations/woocommerce/faq#prices).
# Quick start guide
Source: https://docs.smartsend.io/quickstart
Set up your Smart Send account and start shipping in minutes.
We have made it super simple to get started with Smart Send. Simply register a user and then we guide you step-by-step and you should be setup in a matter of a few minutes.
## Create your Smart Send account
Use the signup form to create your account. You’ll be logged in automatically and guided through the initial setup steps.
Create your free account to get started.
No credit card is required to get started. Simply create an account and get a 10-day free trial with access to all of our features.
## Set up your account
Go to the signup page and create your account. After registration, you’ll be logged in and see the onboarding steps.
Enter your main business or warehouse address. This address appears on shipping labels and tracking pages.
Connect your shipping carrier(s) to enable label creation and tracking. See details for your carrier here.
For most users, connecting your webshop is the easiest way to manage shipments. Go to Integrations and follow the instructions for your platform (e.g., Shopify, WooCommerce, or API).
Once setup is complete, you can create shipping labels directly in Smart Send or from your connected webshop.
## Next steps
* See integration guides for platform-specific setup.
* Visit the knowledge base for more in-depth articles.
If you need help, check our FAQ or contact support.
# Agentic commerce
Source: https://docs.smartsend.io/ai/agentic-commerce
What AI shopping is, how a shopper uses an AI agent to buy, the protocols behind it, and how to prepare your store.
Agentic commerce — also called AI shopping — is shopping carried out by an AI agent on a customer's behalf. Instead of browsing a storefront, the shopper asks an assistant like ChatGPT, Gemini, Perplexity, or Claude to find, compare, and buy a product. The agent reads live catalog data, narrows the options as the shopper refines what they want, and completes the purchase — sometimes on your store's checkout, sometimes without the shopper ever leaving the chat.
For a merchant, the question shifts from "how does my store rank in search" to "can an agent read my catalog and act on it correctly." This page explains how a shopper uses an AI agent to buy, the protocols that make it work, and what you can do today to prepare.
## How a shopper uses an AI agent
From the shopper's side, buying through an agent is a conversation, not a sequence of pages. A typical purchase moves through three stages.
The shopper states a need in plain language — "a waterproof jacket for autumn hiking under 1,500 kr" — instead of typing keywords into a search box. The agent reads structured product data from connected stores and returns a short, relevant set of options rather than a long results page.
The shopper reacts and adjusts: "only breathable ones," "something in green," "what can ship to Denmark this week." The agent re-queries live data — price, variants, availability — and updates its suggestions. This back-and-forth replaces filtering and tab-switching, and it's where most of the decision happens.
Once the shopper settles on a product, the agent guides them through checkout. Depending on the AI client and what your platform supports, this happens in one of the two ways below.
### Where checkout happens
The final step — paying — takes one of two forms.
The agent opens your store's real checkout inside an in-app browser. The shopper completes the purchase on your page, using your payment, tax, and shipping setup. This is how ChatGPT handles checkout today.
The shopper confirms and pays without leaving the chat. The agent passes the order to your store through a commerce protocol, and your platform handles payment, tax, fraud checks, and fulfilment behind the scenes. Microsoft Copilot and AI Mode in Google Search work this way.
Either way, the order lands in your normal admin and you stay merchant of record — you keep the customer relationship, the payment, and post-purchase control. The only difference is where the shopper taps **buy**.
## What changes for merchants
Shoppers increasingly start with an assistant rather than a search engine. Your products are surfaced by an agent reading structured data, not by a page a person scrolls.
An agent does not see your design. It needs complete, consistent, structured product data — attributes, categories, pricing, and availability it can parse.
Platforms differ on who owns the buyer. Shopify, for example, keeps the merchant as merchant of record, so you retain the customer relationship and post-purchase control.
Orders placed through an agent are attributed to the AI channel, giving you insight into which assistants drive sales and what customers ask for.
## The protocols
Several standards are emerging, each connecting AI agents to a store's live data and checkout. They are young and moving quickly, and in most cases your e-commerce platform builds the integration so you don't wire it up yourself.
| Protocol | Backed by | What it does |
| - | - | - |
| Model Context Protocol (MCP) | Open standard | Bridges an agent to live store data such as inventory, pricing, and availability. |
| Universal Commerce Protocol (UCP) | Shopify and Google | Defines how agents create carts, check out, pay, and handle post-purchase. Powers native checkout in Microsoft Copilot, Gemini, and AI Mode in Search. |
| Agentic Commerce Protocol (ACP) | OpenAI and Stripe | Connects ChatGPT to merchant catalogs for product discovery and purchase inside a chat. |
No single protocol has won. The practical takeaway is to keep your product data clean and let your platform handle the protocol integrations as they ship.
## How to prepare
The single most impactful step is to make your product data as clean, complete, and structured as possible. An agent can only sell what it can reliably read.
* **Complete attributes.** Fill in size, color, material, and identifiers like GTIN or barcode for every variant.
* **Consistent categories.** Group products so an agent can infer what they are and when to suggest them.
* **Accurate pricing and availability.** Keep stock and prices in sync so an agent never quotes something you can't fulfill.
* **Structured data.** Add product schema to your pages so the underlying data is machine-readable.
* **HS codes for international sales.** Correct customs tariff codes keep cross-border orders shippable. See [understanding customs](/knowledge/international-shipping/understanding-customs).
Most of this is the same data hygiene that improves traditional search ranking. Preparing for agents rarely means new work — it means finishing the catalog you already have.
## On your platform
Both platforms Smart Send supports have published their direction for AI-driven shopping. Apply the data hygiene above, then dig into the store-side setup with our [Shopify recommendations](/knowledge/shopify/recommendations) and [WooCommerce integration guide](/integrations/woocommerce/introduction).
How Shopify syndicates your catalog across AI agents from a single setup.
How WooCommerce is building toward MCP, ACP, and UCP to keep stores discoverable.
# Claude plugin
Source: https://docs.smartsend.io/ai/claude-plugin
Book shipments by chatting with Claude using the official Smart Send plugin.
The Smart Send plugin lets you book shipments, compare rates, find service points, and track parcels by chatting with Claude. It bundles two things in one install: a connection to the [Smart Send MCP server](/ai/mcp-server), so every action runs against your real account and carrier connections, and the [Smart Send Skill](/ai/skill), so Claude knows how to use those tools well.
The plugin works across Claude Code , Claude Desktop , and Claude on the web . The commands below show the Claude Code flow; in Claude Desktop and Claude Web you add the same plugin through the app's plugin settings.
## Before you start
* A Smart Send account. The [free plan](/fundamentals/billing) is enough to get started.
* At least one [connected carrier](/fundamentals/carrier-connections), so there are services to book.
* One of Claude Code , Claude Desktop , or Claude on the web , installed and signed in.
## Install the plugin
In Claude Code, run these commands in order:
```bash theme={null}
/plugin marketplace add smartsendio/claude-plugin
/plugin install smartsend@smartsend
/reload-plugins
```
In Claude Desktop and Claude Web, open the app's plugin settings and add the same Smart Send plugin from the `smartsendio/claude-plugin` marketplace.
* The first command registers the Smart Send repository as a plugin marketplace.
* The second installs the plugin to your user scope, so it's available across all your projects.
* The third activates it without restarting Claude Code.
## Sign in
The plugin uses OAuth — there are no API keys to copy around. The first time you use a tool, Claude asks you to sign in to Smart Send and approve access. Log in with your existing account, approve, and you're connected.
## Try it
Ask Claude in plain language. For example:
* "Book a 2 kg parcel to this customer with PostNord home delivery."
* "Find me the three closest GLS parcel shops to postal code 8000 in Denmark."
* "Where is order #1042? It was supposed to arrive yesterday."
* "Validate these 40 addresses from my CSV before I import them."
Claude collects the details it needs — addresses, parcel dimensions, and service selection — and confirms with you before booking anything.
## Keep it up to date
To update the plugin to the latest version:
```bash theme={null}
/plugin marketplace update smartsend
/reload-plugins
```
## Next steps
See the tools, resources, and prompts behind the plugin.
The playbook the plugin uses to ship well.
Build a custom integration on the same shipping engine.
# Marketing and ads
Source: https://docs.smartsend.io/ai/marketing-and-ads
Use AI to generate marketing material — copy, images, and video — so a small team can run more campaigns.
Marketing output used to scale with headcount. Ad copy, email campaigns, social posts, product photography, and short video each took time and often an agency. AI shifts the bottleneck from production to ideas and judgment, so a small team can run more campaigns and test more variants than before.
## Where AI helps
Draft ad headlines, email subject lines and body, social captions, and blog posts from a short brief, in your brand's voice.
Generate ad creative and lifestyle imagery, edit backgrounds, and produce a set of consistent variants for different placements.
Turn product photos and clips into short-form video for social and ads, with captions and music.
Suggest audiences, send times, and A/B variants, then summarize results so you can iterate faster.
## Keep it on-brand and honest
You are accountable for what you publish. Review AI-generated claims for accuracy, keep the tone consistent with your brand, and check that creative meets the rules of the ad platform you run it on. Treat generated material as a first draft, not a finished campaign.
## On your platform
Both platforms Smart Send supports offer AI for marketing content. Start with your platform, then apply the review discipline above.
Shopify's built-in AI for email campaigns, marketing copy, and creative.
WooCommerce's guide to AI-powered marketing and the tools to use.
# MCP server
Source: https://docs.smartsend.io/ai/mcp-server
The hosted Smart Send MCP server: tools, resources, and prompts for AI agents.
Smart Send runs a hosted Model Context Protocol (MCP) server at mcp.smartsend.io . It exposes Smart Send's shipping engine to AI agents as a set of tools, read-only resources, and guided prompts. Actions run against your real account and carrier connections.
Authentication is handled with OAuth: an agent signs in with your Smart Send account and you approve access — no API keys to manage.
## Connect
The supported way to use the server today is the [Claude plugin](/ai/claude-plugin), which bundles the connection and the sign-in flow.
Book shipments by chatting with Claude in a few commands.
## Tools
The server exposes six tools an agent can call:
| Tool | What it does |
| - | - |
| `find-delivery-options` | Returns the available carriers, services, and add-ons for a route, with delivery windows. |
| `book-shipment` | Registers a shipment, then generates its tracking number and documents. |
| `search-service-points` | Locates nearby pickup points and parcel shops. |
| `validate-address` | Validates up to 100 addresses in a single call. |
| `search-shipments` | Retrieves previous shipments by a range of criteria. |
| `create-shipment-template` | Saves a reusable shipping configuration for repeat shipments. |
## Resources
The server provides read-only resources covering account and team details, available routes, service point information, shipment records, tracking data, saved templates, and downloadable shipping documents. Agents read these to ground their answers in your real data.
## Prompts
Two guided prompts walk an agent through multi-step workflows:
* `book-shipment` — collect the details, choose a service, and confirm before booking.
* `track-shipment` — find a shipment and report its current status.
## Build a custom integration
Prefer to integrate directly? The same shipping capabilities are available through the Smart Send REST API.
Authenticate with a token and call the API from any system.
# Overview
Source: https://docs.smartsend.io/ai/overview
How Smart Send works with AI, and how AI is reshaping e-commerce.
AI is changing the world around us at an incredible pace. That naturally reshapes how we think about e-commerce and shipping. Smart Send embraces AI, and we are here to help you get the best of it.
This section covers two things: what AI agents can do with Smart Send, and how AI is reshaping e-commerce more broadly.
## Smart Send for AI agents
Smart Send gives AI agents two things: a hosted [Model Context Protocol](/ai/mcp-server) (MCP) server and a [Skill](/ai/skill). The MCP server lets an agent book real shipments, compare rates, find service points, validate addresses, and track parcels on your behalf. The Skill teaches the agent how to use those tools well for shipping and e-commerce. Every agent action uses the same account and carrier connections you already use in the platform.
You can install the MCP server and the Skill on their own, or get both at once with our [Claude plugin](/ai/claude-plugin), which bundles them.
What AI agents can do with Smart Send, and who it's for.
Book shipments by chatting with Claude. Install, sign in, and go.
The tools, resources, and prompts exposed at mcp.smartsend.io.
The playbook for using Smart Send well in shipping and e-commerce.
## MCP vs Skills
The MCP server and the Skill solve different problems, and they work best together.
The **MCP server** gives an agent authenticated access to the Smart Send system — the tools it calls to find delivery options, book shipments, and track parcels, all against your real account and carrier connections.
The **Skill** gives an agent the knowledge of how to use that access well in the context of shipping and e-commerce — which tool to reach for, what data to include, and the conventions that keep bookings correct.
A Skill without the MCP server is a manual with nothing to operate. The MCP server without the Skill is capability without direction. Used together, an agent both has access to Smart Send and knows how to use it.
## AI for your e-commerce
Beyond what Smart Send offers agents, AI is changing how customers find and buy products, and how you produce the content that reaches them. These articles explain that shift and how to put AI to work in your store.
What agentic commerce is, the protocols behind it, and how to prepare your store.
Generate product descriptions, images, and metadata at scale.
Produce copy, images, and video for more campaigns with a small team.
# Smart Send for AI agents
Source: https://docs.smartsend.io/ai/overview-agents
What AI agents can do with Smart Send, and who it's for.
Smart Send exposes its shipping engine to AI agents through two pieces that work together: a hosted [MCP server](/ai/mcp-server) that gives an agent access to your account, and a [Skill](/ai/skill) that teaches the agent how to use that access well. An agent can carry out the same core actions you do in the platform — find delivery options, book shipments, locate service points, validate addresses, and track parcels — using your existing account and carrier connections.
## What agents can do
These are the everyday actions an agent can take on your behalf:
Return the available carriers, services, and add-ons for a route, with delivery windows.
Register a shipment, then generate its tracking number and documents.
Follow a parcel's current status and event history.
Retrieve previous shipments by a range of criteria.
Agents can also locate service points, validate addresses, save reusable templates, and read account, route, shipment, tracking, and document data. See the [MCP server](/ai/mcp-server) page for the full list of tools, resources, and prompts.
## Who it's for
Book an ad-hoc parcel by chatting with Claude — no spreadsheet, no manual data entry. Useful when you ship too rarely to keep a full workflow in your head.
Connect the MCP server to an AI agent and let it handle shipping inside a larger automation, using natural language instead of raw API calls.
## What you need
* A Smart Send account. The [free plan](/fundamentals/billing) is enough to get started.
* At least one [connected carrier](/fundamentals/carrier-connections), so the agent has services to book.
* [Sender information](/fundamentals/sender-information) set on your team, so shipments have a valid origin.
## Get started
The fastest way to try it: chat with Claude.
The tools, resources, and prompts behind the integration.
The playbook that teaches an agent how to ship well.
# Product content
Source: https://docs.smartsend.io/ai/products
Use AI to generate product descriptions, images, and metadata at scale — and make your catalog agent-ready.
Producing catalog content is slow work. A description, a clean set of images, and complete metadata for every product used to take a small team hours per item. AI compresses that to minutes, so you can fill out a catalog that would otherwise stay half-finished.
This pays off twice. Better content converts the human shoppers browsing your store today, and complete, structured content is exactly what AI agents need to discover and sell your products tomorrow. See [agentic commerce](/ai/agentic-commerce) for why that second audience matters.
## Where AI helps
Turn a few attributes and keywords into a first-draft description in your brand's tone, then refine it. Useful for long catalogs and frequent restocks.
Remove or replace backgrounds, place a product in a scene, and generate consistent thumbnails from a single photo.
Generate titles, categories, tags, and attributes so each product is complete and consistent across the catalog.
Localize descriptions and metadata for each market you sell into, keeping tone and terminology consistent.
## Keep a human in the loop
AI drafts; you approve. Generated copy can invent specifications, overstate claims, or drift from your brand voice, and generated images can misrepresent a product. Review for accuracy and tone before publishing — especially anything that affects fit, materials, or compliance.
## Make it agent-ready
The cleaner and more complete your content, the better it performs in traditional search and the more discoverable you are to AI agents. Once your catalog is filled out, follow the data checklist in [how to prepare](/ai/agentic-commerce#how-to-prepare) to add structured data and identifiers agents rely on.
## On your platform
Both platforms Smart Send supports ship built-in AI for product content. Start there, then apply the same review discipline above.
Shopify's built-in AI for product descriptions, images, and more — free across all plans.
WooCommerce's guide to writing product descriptions for search, AI, and sales.
# Skill
Source: https://docs.smartsend.io/ai/skill
The Smart Send Skill: best practices for using Smart Send in shipping and e-commerce.
Smart Send publishes a Skill — a `SKILL.md` that teaches an AI agent the best practices for using Smart Send in the context of shipping and e-commerce. It explains which tool to reach for, what data to include, and the conventions that keep bookings correct.
Where the [MCP server](/ai/mcp-server) gives an agent access to the Smart Send system, the Skill gives it the knowledge to use that access well. The two go hand in hand: the MCP server is the capability, the Skill is the playbook.
## What the Skill covers
The Skill encodes the parts of Smart Send that aren't obvious from the tools alone:
* **How Smart Send works.** It is a shipping aggregator that handles carrier complexity on your behalf, so the agent should pass as much data as it has rather than trimming fields to "keep things simple".
* **The booking flow.** When a service is already known, book directly; when it isn't, find delivery options first; reserve address validation for standalone bulk checks.
* **Field conventions.** The exact field names the tools expect (`address_lines`, `postal_code`, `carrier_code`, `service_code`), so the agent doesn't invent synonyms from other shipping APIs.
* **Safe behaviour.** Confirm before booking, treat a booked shipment as final, and never fabricate data.
## How to get it
The Skill is bundled in the [Claude plugin](/ai/claude-plugin) alongside the MCP connection, so installing the plugin gives you both at once. You can also read the source directly.
Install the plugin to get the Skill and the MCP server together.
Read the `SKILL.md` in the Smart Send plugin repository.
## Next steps
The tools, resources, and prompts the Skill teaches an agent to use.
What AI agents can do with Smart Send, and who it's for.
# Start a booking batch
Source: https://docs.smartsend.io/api-reference/booking-batches/start-a-booking-batch
/openapi-v2beta.json post /beta/teams/{teamUuid}/booking-batches/{batch}/start
Starts booking the shipments in a batch, one at a time.
# Stop a booking batch
Source: https://docs.smartsend.io/api-reference/booking-batches/stop-a-booking-batch
/openapi-v2beta.json post /beta/teams/{teamUuid}/booking-batches/{batch}/stop
Stops a booking batch and cancels shipments whose booking has not started.
# Get document
Source: https://docs.smartsend.io/api-reference/documents/get-document
/openapi-v2beta.json get /beta/teams/{teamUuid}/documents/{document}
Returns a document's metadata, download link and latest print status.
# List documents
Source: https://docs.smartsend.io/api-reference/documents/list-documents
/openapi-v2beta.json get /beta/teams/{teamUuid}/documents
Lists the team's completed shipment documents, reports and manifests.
# Get a printer
Source: https://docs.smartsend.io/api-reference/printing/get-a-printer
/openapi-v2beta.json get /beta/teams/{teamUuid}/printers/{printer}
Returns a printer's current availability, supported formats and reported paper sizes.
# Get print job status
Source: https://docs.smartsend.io/api-reference/printing/get-print-job-status
/openapi-v2beta.json get /beta/teams/{teamUuid}/print-jobs/{printJob}
Returns the current status and details of a print attempt.
# List print jobs
Source: https://docs.smartsend.io/api-reference/printing/list-print-jobs
/openapi-v2beta.json get /beta/teams/{teamUuid}/print-jobs
Lists print attempts and their current status, with filters and cursor pagination.
# List team printers
Source: https://docs.smartsend.io/api-reference/printing/list-team-printers
/openapi-v2beta.json get /beta/teams/{teamUuid}/printers
Lists the team's configured printers, supported formats and reported paper sizes.
# Print or reprint a document
Source: https://docs.smartsend.io/api-reference/printing/print-or-reprint-a-document
/openapi-v2beta.json post /beta/teams/{teamUuid}/print-jobs
Creates a print attempt for a document using the selected or default printer.
# Create a shipment template
Source: https://docs.smartsend.io/api-reference/shipment-templates/create-a-shipment-template
/openapi-v2beta.json post /beta/teams/{teamUuid}/shipment-templates
Creates a reusable template from partial shipment input.
# Delete a shipment template
Source: https://docs.smartsend.io/api-reference/shipment-templates/delete-a-shipment-template
/openapi-v2beta.json delete /beta/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}
Permanently deletes a shipment template.
# Get a shipment template
Source: https://docs.smartsend.io/api-reference/shipment-templates/get-a-shipment-template
/openapi-v2beta.json get /beta/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}
Returns a shipment template and its reusable booking input.
# List shipment templates
Source: https://docs.smartsend.io/api-reference/shipment-templates/list-shipment-templates
/openapi-v2beta.json get /beta/teams/{teamUuid}/shipment-templates
Lists the team's reusable shipment templates.
# Update a shipment template
Source: https://docs.smartsend.io/api-reference/shipment-templates/update-a-shipment-template
/openapi-v2beta.json put /beta/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}
Updates the reusable booking input in a shipment template.
# Receive team resource updates
Source: https://docs.smartsend.io/api-reference/webhooks/receive-team-resource-updates
/openapi-v2beta.json webhook teamEvents
Receives signed notifications about changes to team resources.
# List inventory levels
Source: https://docs.smartsend.io/api-reference/wms-experimental/list-inventory-levels
/openapi-v2beta.json get /beta/teams/{teamUuid}/wms/inventory
Lists the team's inventory levels, optionally filtered by SKU and bin.
# List open fulfillment requests
Source: https://docs.smartsend.io/api-reference/wms-experimental/list-open-fulfillment-requests
/openapi-v2beta.json get /beta/teams/{teamUuid}/wms/fulfillments
Lists open fulfillment requests from the team's configured WMS.
# Move inventory between bins
Source: https://docs.smartsend.io/api-reference/wms-experimental/move-inventory-between-bins
/openapi-v2beta.json post /beta/teams/{teamUuid}/wms/inventory/{sku}/move
Moves a quantity of a SKU from one bin to another.
# Record picked lines for a fulfillment request
Source: https://docs.smartsend.io/api-reference/wms-experimental/record-picked-lines-for-a-fulfillment-request
/openapi-v2beta.json post /beta/teams/{teamUuid}/wms/fulfillments/{fulfillmentIdentifier}/pack
Records picked lines for a fulfillment request.
# Set the inventory count for a SKU in a bin
Source: https://docs.smartsend.io/api-reference/wms-experimental/set-the-inventory-count-for-a-sku-in-a-bin
/openapi-v2beta.json patch /beta/teams/{teamUuid}/wms/inventory/{sku}
# Show a catalog item by SKU
Source: https://docs.smartsend.io/api-reference/wms-experimental/show-a-catalog-item-by-sku
/openapi-v2beta.json get /beta/teams/{teamUuid}/wms/items/{sku}
# Show a fulfillment request with its picking lines
Source: https://docs.smartsend.io/api-reference/wms-experimental/show-a-fulfillment-request-with-its-picking-lines
/openapi-v2beta.json get /beta/teams/{teamUuid}/wms/fulfillments/{fulfillmentIdentifier}
# Show inventory levels for a SKU
Source: https://docs.smartsend.io/api-reference/wms-experimental/show-inventory-levels-for-a-sku
/openapi-v2beta.json get /beta/teams/{teamUuid}/wms/inventory/{sku}
Returns bin locations and quantities for a SKU.
# Labels
Source: https://docs.smartsend.io/knowledge/general/labels
Choosing label sizes, printing methods, and label quality for shipping and warehouse labels
A webshop prints more than one kind of label, and they do not have the same requirements. A shipping label is scanned a handful of times and thrown away on delivery. A shelf label sits in the warehouse for years. Knowing which kind you are printing tells you what to buy.
Includes a barcode and attached to each parcel.
Marks bins, shelves, and locations in the warehouse.
Barcodes and price tags on the products themselves.
## Printing methods
Two printing methods cover almost everything a webshop needs, and the difference decides how long the print survives.
**Direct thermal** printing burns the image into heat-sensitive label paper. There is no ribbon to buy or replace, so it is cheaper to run, but the print fades over time and with exposure to heat, sunlight, and abrasion.
**Thermal transfer** printing melts ink from a ribbon onto the label. It needs a ribbon and a printer that can take one, but the result lasts for years, especially on a coated label.
## Shipping labels
Shipping labels are best printed with **direct thermal on uncoated labels** — for example Zebra Z-Perform quality. A shipping label only has to survive from packing table to doorstep, so paying for a longer-lasting label gains you nothing.
* **Short life.** Printed at packing, scanned a handful of times in transit, discarded on delivery. Days, not months.
* **Limited exposure.** A delivery van, a sorting hall, a parcel locker. This is not an outdoor asset tag or a freezer label.
This assumes normal parcel shipping. Cold chain, long-term storage, and outdoor exposure need durable labels and a different printing method.
For which label size each carrier needs and where to buy them, see [Label sizes by carrier](/fundamentals/print-setup#label-sizes-by-carrier).
Zebra explains the differences between their label material lines in this video:
### Quality requirements
What you cannot compromise on is that the barcode scans reliably at every handover. Barcode print quality is graded by the international standard **ISO/IEC 15416** on an A–F scale:
| Grade | Value | Meaning |
| - | :-: | - |
| A | 4.0 | Excellent, scans first time |
| B | 3.0 | Good, reliable in daily use |
| C | 2.0 | Acceptable, the shipping minimum |
| D | 1.0 | Poor, expect misreads |
| F | 0.0 | Failed, often unreadable |
**Grade C (2.0) is the practical minimum** for shipping barcodes. It is the floor set by the GS1 General Specifications and by the routing guides of major retailers. Below Grade C a barcode often still scans on your own scanner and then fails on the carrier's equipment, which is the failure that actually costs you.
The grade describes the printed result, not the paper. The same roll of labels produces Grade A or Grade D output depending on the condition of the printhead and the darkness and speed settings. Buying good labels is necessary but not sufficient — see [Print quality issues](/troubleshooting/print-quality).
## Shelf labeling
Shelf, bin, and location labels stay in place for years and get handled, so ideally you print them with **thermal transfer onto a coated label**. That combination resists rubbing and fading far better than direct thermal.
That said, a second printer is a real cost. If your volume is small, printing shelf labels with your **existing direct thermal printer on ordinary uncoated labels** works fine and is the cheaper option, because you reuse the printer you already have for shipping labels instead of buying a thermal transfer printer. You will replace worn labels occasionally, which for most warehouses is less work than maintaining a second printer.
You can print both kinds on the same printer, but usually not on the same roll. Shipping labels and shelf labels need different sizes, so you either keep a second roll to swap in or dedicate a printer to each.
### Label size
For general purpose labels, standardise on **57 × 32 mm** (2.25 × 1.25 in) — the format sold as DYMO 11354 / S0722540. It is widely stocked from many suppliers and compatible brands, and it is large enough for a readable barcode plus a line or two of text while still fitting a shelf edge or a small bin.
Treat it as a starting point rather than a rule. Larger bins, or labels that need more text, are better served by a bigger roll.
### Designing labels
Two tools cover most needs:
Free, browser-based, and no account needed. Drag and drop text, shapes, barcodes, QR codes, and images, then export to PDF or PNG. This link opens a ready-made 57 × 32 mm canvas.
Zebra's own label design software for Windows. A better fit when you print in volume from a Zebra printer or need to reuse label templates.
Use the OpenLabelMaker editor directly for one-off labels in other sizes.
## Product labeling
Labels applied to the products themselves — barcodes, price tags, ingredient declarations, and regulatory markings — are outside the scope of this page. Requirements vary by product category and by the rules that apply where you sell.
## Quality issues
Poor print is usually one of three things, in order of how often it turns out to be the cause:
By a wide margin the most common cause. Adhesive residue and paper dust build up on the printhead and platen roller and show as faded patches, streaks, or blank vertical lines. Cleaning fixes it.
Individual heating elements fail over time and print a blank vertical line in the same position on every label. Cleaning does not help — the printhead is a consumable and needs replacing.
If the whole label is uniformly too light, or dark and smeared, the print darkness and print speed are wrong for the label stock you are using. This is software, not a defect.
For the step-by-step fix, see [Print quality issues](/troubleshooting/print-quality).
## Quality validation
True ISO/IEC 15416 verification requires dedicated, calibrated, standard-compliant hardware: a barcode verifier with controlled illumination, a defined measurement aperture, and a specified wavelength. A phone camera is not a verifier, and "it scanned" is not a grade.
A practical check of the three properties that matter most is only an estimate, but it gets you a long way:
* **Contrast.** Solid black bars on a clean white background, with no grey or washed-out areas.
* **Sharpness.** Crisp bar edges, with no smearing, bleeding, voids, or ragged edges.
* **Decodability.** The code reads first time, from a normal working distance, at an angle, and with a scanner other than your own if you have one.
A label that fails this check will certainly fail verification, so fix it before it reaches a carrier. Passing is a good sign rather than a guarantee.
## Related pages
Label sizes by carrier, where to buy labels, and how to configure automatic printing.
Our recommended printer, barcode scanner, and handheld terminal.
How labels and barcodes fit into picking and packing.
# Hardware
Source: https://docs.smartsend.io/knowledge/hardware
Recommended printer and barcode scanner for an e-commerce shipping setup
There is never a single "best" hardware setup that fits every store, and your budget is a deciding factor. That said, the setup below is what we recommend for most e-commerce shops: reliable, carrier-agnostic equipment at a sensible price point. We have a dedicated page for each part where you can read more and see other options.
Zebra ZD421d label printerZebra DS2278-SR wireless scannerZebra TC22 mobile computer
## Printer
Our recommendation is the **Zebra ZD421d** (USB + Bluetooth), because Zebra's ZPL printer language is a de facto standard that even competing brands emulate: label formats and drivers are built with it in mind, consumables and spare parts are easy to get, and Zebra's own setup and [print quality](/troubleshooting/print-quality) tooling is genuinely good.
* **Resolution:** 203 dpi, sharp enough for clear, scannable labels.
* **Speed:** fast printing that keeps up with daily order volume.
* **Label size:** handles labels for all carriers, up to a maximum width of 108 mm.
* **Price:** a strong price point for a dedicated label printer.
The USB + Bluetooth version keeps the price point low, and you are not locked in: Wi-Fi or Ethernet (one or the other, not both) can be added later with an extra module that connects to the bottom of the printer. If you already know you will be printing from several different computers, consider going for a Wi-Fi or Ethernet version up front instead.
For setup, label sizes by carrier, and automatic printing with the Smart Send print client, see [Print setup](/fundamentals/print-setup).
## Barcode scanner
Our recommendation is the **Zebra DS2278-SR** wireless model with a charging base.
* **Symbologies:** reads both 1D and 2D barcodes.
* **Durability:** built to survive being dropped on the floor.
* **Hands-free use:** the presentation stand lets you scan items without holding the scanner.
A cheaper alternative is the corded **Zebra DS2208-SR**. It scans just as well, but the stand is not nearly as good and the cable often ends up getting in the way, so we recommend the wireless DS2278-SR for most setups.
If you need more, the **Zebra DS3678-ER** is a more rugged and more expensive option that offers much greater read distances.
To learn how barcodes fit into picking and packing, see [Warehouse management](/knowledge/warehouse-management).
## Handheld terminal
A handheld terminal (also called a PDA or handheld mobile computer) is a rugged, Android-based device that combines a built-in barcode scanner with a touchscreen, so staff can scan, look up, and confirm orders while moving around the warehouse.
Our recommendation is the **Zebra TC22** with the **SE4710** scan engine, paired with a trigger handle.
* **Built for scanning:** reads both 1D and 2D barcodes and runs the apps your team needs throughout the day.
* **Trigger handle:** the pistol-grip trigger handle (model **SG-TC2L-BOOT-01**) makes high-volume scanning faster and more comfortable than tapping the screen.
* **Scan engine:** the standard SE4710 engine covers the read distances of a typical warehouse. The premium SE55 (extended range) version is not needed for most webshop warehouses.
If your warehouse has no Wi-Fi or unreliable coverage, consider the **Zebra TC27** instead. It adds 5G mobile connectivity, so the device stays online anywhere in the building without depending on the local network.
# Introduction to international shipping
Source: https://docs.smartsend.io/knowledge/international-shipping/introduction
Get started with cross-border e-commerce and understand the key components of international shipping
Expanding your e-commerce business beyond domestic borders opens significant growth opportunities. Do not let the complexity stop you from expanding globally, but do the nessesary research and planning ahead of time - this is a complicated matter.
## Successful international shipping
Expanding internationally is a powerful growth strategy for e-commerce businesses and a natural next step after establishing a strong domestic presence.
Successfully international sales require not just translating your webshop and allowing shipping to other destinations, but also adapting your logistics, pricing, and customer service to meet the expectations of customers in different countries. Here we focus on the logistics side of international sales as that comes with a great deal of complexity that don't exist in domestic shipping:
* Customs requirements when booking and generating shipping labels
* Potentially multiple carriers involved in a single shipment
* Duties and taxes that must be calculated and collected at checkout
* Longer delivery times and higher shipping costs
## Key components before starting
Before you begin shipping internationally, you need to understand and prepare for several critical components:
### Customs and duties
Every international shipment must clear customs in the destination country. Successful international shipping means avoiding extended delivery time and unexpected surcharge for the customer.
Key to success is to offer *DDP (Delivered Duty Paid)* shipping which means that the buyer will pay everything during checkout without any further surprise charges.
Learn about customs duties, VAT, HS codes, and customs identifiers in detail
### Shipping methods and carriers
Choose the right shipping methods for international deliveries:
* **Express vs standard:** Balance speed against cost
* **Carrier selection:** Different carriers excel in different regions and international shipping might involve multiple carriers.
* **Delivery options:** Decide between DDP (Delivered Duty Paid) and DAP (Delivered at Place). *Hint: Always offer DDP if at all possible.*
* **Tracking capabilities:** Ensure visibility throughout the journey with a tracking system that allows the user to follow the package from booking all the way to final delivery - not just in the destination country.
Always present the **last mile carrier** to the customer as that is often a known and trusted company for them.Make sure that the provided tracking link is to a trust worthy site offering **end-to-end tracking** from booking to final delivery - not just during the final part of the journey.
### Documentation requirements
International shipments require more documentation than domestic ones. Requirements vary depending on the carrer, service and route but examples include:
* **Commercial invoice:** Detailed product information and values
* **Customs declarations:** Forms required by destination countries
* **Certificates of origin:** May be required for preferential tariff treatment
* **Product-specific permits:** Required for regulated goods
Whenever possible, rely on paperless customs to ensure proper handling without unnecessary delay
### Pricing and payment
Set up your systems to handle international transactions:
* **Landed cost calculation:** Include product, shipping, duties, and taxes
* **Currency conversion:** Display prices in local currencies when possible
* **Payment methods:** Offer payment options popular in each market
* **Tax collection:** Configure checkout to collect duties and taxes upfront
### Regulatory compliance
Stay compliant with regulations in each market:
* **Product restrictions:** Understand prohibited and restricted items
* **Labeling requirements:** Meet destination country labeling standards
* **Data privacy:** Comply with data protection regulations (GDPR, etc.)
* **Consumer rights:** Understand return and warranty requirements
## Progressive expansion strategy
Rather than attempting to ship globally all at once, we recommend a strategic, phased approach:
### Phase 1: Start within the EU
If you're based in an EU country, begin by shipping to other EU member states. This offers several advantages:
* **Simplified customs:** No customs declarations for intra-EU shipments
* **Established procedures:** Well-defined VAT and tax regulations
* **Familiar regulations:** GDPR and consumer protection laws apply uniformly
* **Shorter distances:** Faster delivery times and lower costs
Learn about VAT requirements and procedures for EU intra-community trade
### Phase 2: Expand to nearby markets
After establishing EU operations, expand to neighboring markets with established trade relationships:
**United Kingdom:** Post-Brexit procedures are well-defined and familiar to EU businesses.
Understand post-Brexit customs and VAT requirements for UK shipments
**Norway:** Clear DDP procedures through the VOEC scheme make Norway accessible.
Learn about VOEC registration and DDP shipping to Norway
### Phase 3: Enter global markets
Once you've mastered regional shipping, expand to major global markets:
**United States:** The world's largest e-commerce market.
Navigate US customs requirements - especially with latest changes to de minimis rules
**Other markets:** Consider markets based on your product category, competition, and demand:
* **Asia-Pacific:** Australia, Japan, South Korea, Singapore
* **Rest of Europe:** Switzerland, non-EU countries
* **Americas:** Canada, Mexico, Brazil
## Essential first steps
To prepare for international shipping:
1. **Research your target markets**
* Understand demand for your products
* Analyze competition and pricing
* Verify products are allowed in destination countries
* Assess shipping costs and delivery times
2. **Set up your data**
* Add HS codes to all products
* Document country of origin for each product
* Create detailed product descriptions
* Ensure weights and dimensions are accurate
3. **Configure your systems**
* Enable international shipping in your e-commerce platform
* Set up tax and duty calculation
* Configure shipping rates for international zones
* Test the complete checkout flow
4. **Establish carrier relationships**
* Connect with carriers that serve your target markets
* Negotiate rates for international shipments
* Set up accounts and obtain necessary credentials
* Test label generation and tracking
5. **Prepare customer service**
* Train staff on international shipping procedures
* Create FAQ content about duties and delivery times
* Establish processes for handling customs issues
* Set up multilingual support if needed
Connect carriers and configure your shipping settings
## Common pitfalls to avoid
### Underestimating complexity
International shipping is more complex than domestic. Don't assume you can "figure it out as you go." Invest time in understanding requirements upfront to avoid costly mistakes and customer service issues.
### Incorrect product classification
Using wrong HS codes leads to:
* Incorrect duty calculations
* Customs delays and inspections
* Fines and penalties
* Damaged customer relationships
### Hidden costs at delivery
If customers face unexpected charges at delivery, expect:
* High cart abandonment rates
* Refused deliveries
* Negative reviews
* Customer service burden
Always use DDP shipping for B2C sales to collect all charges at checkout.
### Inadequate documentation
Incomplete or incorrect shipment declarations causes:
* Shipment delays at customs
* Additional carrier fees
* Returned packages
* Frustrated customers
It is important to use a Transportation Administration System (TA) that ensures proper documentation generation - like Smart Send 😉
### Poor communication
Customers need to know:
* Expected delivery times (including customs processing)
* What charges are included in the price
* How to track their shipment
* What to do if there are issues
A common problem is that multi-carrier shipments can have tracking numbers that only work in certain legs (often countries). Ensuring that the tracking number works the whole way through the journey is crucial.
## Next steps
Choose your target market and dive into the specific requirements:
# Shipping to Norway
Source: https://docs.smartsend.io/knowledge/international-shipping/shipping-to-norway
Understand in simple terms how EU webshops can sell successfully to Norway
If you run a webshop in the EU and want to sell to Norwegian customers, understanding how to sell and ship without the customer getting unexpected extra charges is critical for a good user experience and a good conversion rate. Since Norway is not in the EU, all shipments to Norway must clear customs. The key to a successful customer experience is ensuring customers know the exact final price at checkout with no unexpected charges at delivery. This is achieved through DDP shipping.
Read our guide on customs and international shipping for more general information.
## Delivery options
When shipping from the EU to Norway, you have two delivery methods:
**DDP (Delivered Duty Paid)** - Recommended for B2C
* You collect all taxes and customs duties at checkout
* Customer pays nothing extra at delivery
* Best for consumer sales (B2C)
**DAP (Delivered at Place)**
* Customer pays taxes and customs duties upon delivery
* Carrier charges an additional processing fee
* Commonly used for business sales (B2B) where the buyer handles customs clearance
For most e-commerce webshops selling to consumers, DDP is the clear choice for better conversion rates and customer satisfaction.
## Shipping DDP to Norway
DDP means you collect all taxes and duties at checkout. Your customer sees the total price upfront and pays nothing extra when the package arrives. This approach delivers significantly higher conversion rates and fewer refused deliveries.
### How DDP works
1. **Customer goes to checkout:** At checkout, the system calculates the complete cost including product prices, shipping, Norwegian VAT (25% for most goods, 15% for foodstuffs), and any applicable customs duties
2. **Customer pays everything:** The customer pays the full amount to your webshop and will not have to pay anything further
3. **Ship with customs clearance:** Your carrier handles customs clearance using the pre-paid duties
4. **Delivered without any extra cost:** Package is delivered to the customer without any extra charges
5. **Remit taxes:** You as seller periodically remit collected VAT to Norwegian authorities
### Requirements
* As a seller then you must be registered in the VOEC Schema.
* All products must have accruate customs information added.
* The webshop must be setup to collect the correct tax and duty during checkout.
### VOEC registration
To ship DDP, you must register in the VOEC scheme:
1. Apply through the Norwegian Tax Administration
2. Provide business registration and contact information
3. Receive your VOEC registration number
4. Configure your e-commerce platform to collect Norwegian VAT
5. Set up periodic VAT reporting and remittance
[Register for VOEC](https://www.skatteetaten.no/en/business-and-organisation/vat-and-duties/register-and-de-register/voec-register/)
### Collecting duties and import taxes at checkout
To successfully implement DDP shipping, your e-commerce platform must calculate and collect the correct duties and import taxes during checkout. This requires real-time calculation based on product details and destination.
**Product data requirements.** All products must have tariff codes (HS codes) and country of origin entered in your system before orders are placed. Without this information, accurate duty and tax calculation is impossible.
The calculated tax and duty must be stored on the order and included on the invoice.
Shopify offers native duties and import tax collection at checkout. This built-in feature handles calculations automatically but charges a service fee. Third‑party apps are available in the Shopify App Store.
WooCommerce provides a free first‑party tax plugin for international tax calculations, including duties and import taxes. Third‑party solutions such as Stripe Tax are also available.
### Required documentation
When shipping DDP from the EU to Norway:
* Commercial invoice with complete product information
* HS codes for all products
* Country of origin for each item
* Proof of VOEC registration
* Customer's national identity number (11 digits) for customs clearance
## Shipping non-DDP to Norway
If you choose not to register for VOEC and ship non-DDP, your customers will face additional charges when packages arrive in Norway. This approach results in lower conversion rates and more customer service issues.
### How non-DDP works
1. You ship the package without collecting Norwegian VAT or duties
2. The package arrives at Norwegian customs
3. The carrier contacts your customer to collect:
* Norwegian VAT (usually 25%)
* Customs duties (if applicable)
* Carrier processing fee (varies by carrier)
4. Customer pays these charges before receiving the package
5. If customer refuses to pay, the package is returned
**Expect lower conversion rates.** Customers abandon carts when they realize additional charges will apply at delivery. Many Norwegian customers will refuse deliveries rather than pay unexpected fees.
### What customers must pay
* **VAT:** 25% for most goods, 15% for foodstuffs (applied to product value + shipping)
* **Customs duties:** Vary by product type and country of origin
* **Carrier processing fee:** Typically 100-200 NOK, varies by carrier
[Use the import calculator](https://www.toll.no/en/services/import-calculator) to help customers estimate total costs.
### National identity number requirement
Norwegian Customs requires the customer's national identity number (11 digits) for customs declarations. If you don't collect this during checkout, the carrier will need to contact the customer to obtain it, causing delays.
## Key considerations
### Customs duties by product type
Not all products are subject to customs duties when shipping from the EU to Norway:
* **Clothing and textiles:** Subject to customs duties
* **Food and foodstuffs:** Subject to customs duties
* **Electronics and most other goods:** Generally exempt from customs duties but still subject to VAT
Check the specific tariff rates for your products at the [Norwegian customs database](https://tolltariffen.toll.no/tolltariff).
### Documentation best practices
Ensure smooth customs clearance with proper documentation:
* Use accurate HS codes for product classification
* Declare correct values (product cost + shipping)
* Include complete product descriptions
* Specify country of origin for each item
* Include customer's national identity number
### Why DDP matters for conversion
Norwegian e-commerce customers are accustomed to transparent pricing. When shopping from EU webshops:
* They expect the checkout price to be the final price
* Unexpected delivery charges lead to cart abandonment
* Refused deliveries damage your brand reputation
* DDP shipping is becoming the market standard
**Start with DDP.** If you're serious about the Norwegian market, set up VOEC registration from the start. The investment in setup pays off through higher conversion rates and fewer customer service issues.
## Additional resources
* [VOEC registration](https://www.skatteetaten.no/en/business-and-organisation/vat-and-duties/register-and-de-register/voec-register/)
* [Norwegian Customs online shopping guide](https://www.toll.no/en/online-shopping)
* [Import cost calculator](https://www.toll.no/en/services/import-calculator)
* [Customs duty lookup](https://tolltariffen.toll.no/tolltariff)
# Shipping to UK
Source: https://docs.smartsend.io/knowledge/international-shipping/shipping-to-uk
Navigate post-Brexit customs, VAT, and EORI requirements for shipments from the EU to the United Kingdom
**Scope of this guide.** This article focuses on shipments **from EU countries to the United Kingdom** to simplify the content. Rules differ for shipments originating from the UK or from non-EU countries.
Since Brexit, shipping from the EU to the UK requires customs procedures similar to other non-EU destinations. Understanding the new requirements is essential for successful UK sales, whether you're selling to consumers (B2C) or businesses (B2B).
## What changed after Brexit
Before Brexit, the UK was part of the EU single market and customs union. Now:
**Customs procedures:**
* All shipments from EU to UK require customs declarations
* Goods are subject to import controls at the UK border
* Customs duties may apply depending on product and origin
* VAT treatment has changed significantly
**Documentation:**
* Commercial invoices required for all shipments
* EORI numbers needed for customs clearance
* Proof of origin may be required for preferential tariff treatment
**VAT:**
* UK VAT replaced EU VAT for UK sales
* Distance selling to UK requires different VAT treatment
* Import VAT charged at UK border or prepaid
**Rules are different from EU shipping.** Don't assume procedures that worked for intra-EU sales will work for the UK. Treat UK shipments as international exports requiring full customs compliance.
## Delivery options: DDP vs DAP
When shipping from the EU to the UK, you must choose between two delivery terms:
### DDP (Delivered Duty Paid) - Recommended for B2C
With DDP shipping, you collect all taxes and duties at checkout:
**How it works:**
1. Calculate UK VAT and duties at checkout
2. Customer pays total amount to your webshop
3. You pay duties and VAT to carrier or customs
4. Package delivered to customer with no extra charges
**Benefits:**
* Higher conversion rates (no surprise charges)
* Better customer experience
* Fewer refused deliveries
* Reduced customer service inquiries
**Requirements:**
* Calculate accurate duties and VAT
* Register for UK VAT if needed
* Arrange customs clearance with carrier
* Include all costs in checkout price
### DAP (Delivered at Place)
With DAP shipping, the customer pays duties and taxes upon delivery:
**How it works:**
1. Customer pays only product and shipping cost
2. Package arrives at UK border
3. Carrier contacts customer to collect duties, VAT, and handling fee
4. Customer pays before delivery
**Challenges:**
* Lower conversion rates
* High rate of refused deliveries
* Customer complaints about unexpected charges
* Carrier handling fees add significant cost
**Use DDP for consumer sales.** UK customers expect to see final prices at checkout. DDP shipping significantly improves conversion rates and customer satisfaction compared to DAP.
## UK VAT requirements
### VAT rates in the UK
UK VAT rates differ from EU rates:
**Standard rate:** 20% (most goods)
**Reduced rate:** 5% (children's car seats, home energy, etc.)
**Zero rate:** 0% (books, children's clothing, food, etc.)
### VAT on shipments to UK
How VAT is handled depends on shipment value:
#### Shipments under £135
For goods valued at **£135 or less:**
**Marketplace sales (e.g., Amazon, eBay):**
* Marketplace responsible for collecting and paying UK VAT
* You don't charge VAT separately
**Direct sales (your own webshop):**
* You should register for UK VAT
* Charge UK VAT at checkout
* Submit VAT returns to HMRC quarterly
* Customer pays nothing extra at delivery
#### Shipments over £135
For goods valued **over £135:**
**You charge:**
* Product price without UK VAT
* Shipping costs
**Charged at UK border:**
* UK VAT (usually 20%)
* Customs duties (if applicable)
* Carrier handling fee
**Best practice:**
* Use DDP to prepay these charges
* Include estimated duties in checkout price
* Customer receives package without additional payment
**£135 threshold is for goods value only.** Shipping costs are not included when determining if a shipment is above or below £135. Calculate based on the product value alone.
### UK VAT registration
You need UK VAT registration if:
**Required:**
* Your direct UK sales (under £135) exceed the threshold
* You want to use DDP for shipments over £135
* You want to reclaim UK VAT on business expenses
**How to register:**
1. Apply through HMRC's online portal
2. Provide business details and estimated sales
3. Appoint a UK tax representative if no UK establishment
4. Receive VAT registration number
[Register for UK VAT](https://www.gov.uk/register-for-vat)
**Tax representative:**
If you don't have a UK establishment, HMRC may require you to appoint a UK-based tax representative who is jointly liable for your VAT obligations.
## Customs duties and declarations
### UK Global Tariff
The UK applies its own tariff schedule called the UK Global Tariff (UKGT):
**Duty rates vary by:**
* Product type (HS code classification)
* Country of origin
* Trade agreements
**Common duty rates:**
* Many goods: 0-4%
* Clothing and textiles: 8-12%
* Footwear: 8-16%
* Agriculture and food: Varies widely
Check specific rates: [UK Global Tariff tool](https://www.trade-tariff.service.gov.uk/)
### Trade agreements
The UK has trade agreements that may provide preferential rates:
**EU-UK Trade and Cooperation Agreement:**
* Goods originating in the EU qualify for zero tariff
* Requires proof of origin
* Origin must be proven with statement on invoice or separate certificate
**Other agreements:**
* UK has agreements with many countries
* Each has specific origin rules
**Prove EU origin for duty-free treatment.** Without proper origin documentation, UK customs will apply standard tariff rates even if goods qualify for preferential treatment under the trade agreement.
### Required customs information
Every shipment to the UK requires:
**Product information:**
* Accurate HS codes for all products
* Country of origin for each item
* Detailed product descriptions
* Unit values in GBP
**Shipment information:**
* EORI number (yours and optionally customer's)
* Incoterms (DDP or DAP)
* Invoice total and currency
* Shipping costs
**Documentation:**
* Commercial invoice
* Customs declaration (completed by carrier)
* Certificate of origin (if claiming preferential treatment)
## EORI numbers
### What is an EORI number?
An EORI (Economic Operators Registration and Identification) number is a unique identifier for businesses involved in customs activities:
**Format:**
* GB followed by 12 digits: `GB123456789000`
* Or: Two-letter country code followed by up to 15 characters
**Used for:**
* Customs declarations
* Import and export procedures
* Tracking shipments through customs
* Claiming preferential tariff treatment
### Getting an EORI number
**If you have UK establishment:**
* Apply through HMRC
* Usually issued within 24 hours
* Free of charge
**If you're EU-based:**
* You need an EU EORI number (from your country)
* May also need a UK EORI for some procedures
[Apply for UK EORI](https://www.gov.uk/eori)
**Customer EORI:**
* Not required for B2C shipments
* May speed up customs for B2B shipments
* Request from business customers when possible
## Practical implementation
### E-commerce platform configuration
**Shopify:**
1. Enable UK shipping in shipping zones
2. Set UK VAT rate (20% standard)
3. Configure markets for UK with local settings
4. Use Shopify Tax or third-party app for VAT compliance
5. Set up customs information on all products
**WooCommerce:**
1. Install WooCommerce Tax or similar plugin
2. Configure 20% UK VAT rate
3. Set up shipping zone for UK
4. Add HS codes and origin to products
5. Configure customs value calculations
Configure customs information in Shopify
### Product data requirements
Add this information to all products:
**Essential:**
* HS code (6-digit minimum, 8-digit preferred)
* Country of origin
* Accurate product description
* Unit value
* Weight and dimensions
**Optional but recommended:**
* Material composition
* Intended use
* Product category
* Brand and manufacturer
### Carrier selection
Choose carriers experienced with UK customs:
**International carriers:**
* **DHL, UPS, FedEx:** Excellent for time-critical shipments, handle customs well
* Premium pricing but reliable service
**Postal services:**
* **PostNord, Bring, Bpost:** Cost-effective for lighter packages
* Longer delivery times but lower costs
**Regional carriers:**
* **DPD, GLS:** Good balance of cost and service
* Well-established UK networks
Connect carriers for UK shipping
### Pricing strategy
Structure your pricing for UK market success:
**DDP pricing (recommended):**
```
Product price: €100
+ Shipping: €15
+ UK VAT (20% of €115): €23
+ Estimated duty (if applicable): €5
= Total customer pays: €143
```
**DAP pricing (not recommended for B2C):**
```
Product price: €100
+ Shipping: €15
= Total at checkout: €115
Customer pays at delivery:
+ UK VAT (20%): ~€23
+ Duty (if applicable): ~€5
+ Carrier handling fee: €10-15
= Additional charges: €38-43
```
**Build duties into your pricing.** If your products typically incur duties, calculate average duty rates and build them into your base prices. This simplifies DDP implementation.
## Documentation and compliance
### Commercial invoice requirements
Every UK shipment needs a commercial invoice with:
**Mandatory fields:**
* Invoice number and date
* Seller details (name, address, EORI, VAT number)
* Buyer details (name, complete address)
* Detailed product descriptions
* HS codes for each item
* Quantity, unit value, and total value
* Country of origin per item
* Incoterms (DDP or DAP)
* Currency
* Signature (digital acceptable)
**For preferential tariff treatment:**
Add origin declaration statement: "The exporter of the products covered by this document declares that, except where otherwise clearly indicated, these products are of EU preferential origin." (Replace "EU" with your specific country if needed, e.g., "French", "German", "Danish")
### Common documentation mistakes
Avoid these errors that cause delays:
**Incomplete information:**
* Missing HS codes
* Vague product descriptions ("electronics" instead of "wireless computer mouse")
* Missing country of origin
* Incorrect values
**Value discrepancies:**
* Invoice doesn't match declared value
* Shipping costs not clearly separated
* Discounts not properly documented
**Missing identifiers:**
* No EORI number provided
* Incorrect VAT number format
* Missing origin declaration
## Special considerations
### Northern Ireland
Northern Ireland has special arrangements:
**Goods:**
* Movement of goods between EU and Northern Ireland follows EU rules
* Different from Great Britain (England, Scotland, Wales)
* No customs procedures for EU-Northern Ireland goods shipments
**Services:**
* May have different treatment
* Check current regulations
**Practical impact:**
* Configure Northern Ireland separately from rest of UK
* Apply EU VAT rules for Northern Ireland
* Use UK procedures for Great Britain
### Returns from UK
Plan for returns when shipping to UK:
**Challenges:**
* Returns are exports from UK perspective
* Require customs declarations
* May incur duties if not properly managed
**Solutions:**
* Use DDP for returns as well
* Partner with carriers offering prepaid return labels
* Consider return handling service in UK
* Clearly communicate return process
### Prohibited and restricted items
The UK restricts or prohibits certain items:
**Common restrictions:**
* Food products (licensing required)
* Plants and seeds (phytosanitary certificates)
* Weapons and knives
* Medicines and medical devices
* Certain chemicals
[Check UK import restrictions](https://www.gov.uk/import-goods-into-uk)
## Cost considerations
### Typical additional costs
When shipping to UK from EU:
**Customs-related:**
* UK VAT (20% for most goods)
* Customs duties (0-16% typically)
* Customs declaration fee (usually included in shipping)
**Carrier fees:**
* Express carriers: Typically included in shipping rate
* Postal services: May charge separate handling fees
* DDP services: May have additional fees for advancement
**Administrative:**
* UK VAT registration and compliance
* Tax representative fees (if required)
* Additional record keeping
### Cost comparison
Example: €100 product shipped to UK
**Intra-EU (before Brexit):**
* Product: €100
* Shipping: €8
* VAT: Already charged at EU rate
* **Total cost: €108**
**Post-Brexit with DDP:**
* Product: €100
* Shipping: €15 (higher rates)
* UK VAT (20%): €23
* **Total cost: €138**
**Post-Brexit with DAP:**
* Checkout: €115 (product + shipping)
* At delivery: £31 (VAT + handling)
* **Total cost: \~€150** (with customer frustration)
**Communicate price changes clearly.** UK customers may remember pre-Brexit prices. Be transparent about why prices are higher and what customers receive for the price (including all duties and taxes).
## Best practices
### For higher conversion rates
1. **Use DDP shipping** to show complete prices at checkout
2. **Display prices in GBP** for UK customers when possible
3. **Offer free shipping thresholds** to encourage larger orders
4. **Communicate delivery times** including potential customs delays
5. **Provide excellent tracking** to keep customers informed
### For smooth customs clearance
1. **Complete all documentation accurately** before shipment
2. **Use precise product descriptions** and correct HS codes
3. **Include origin declarations** when claiming preferential treatment
4. **Keep copies of all documents** for at least 4 years
5. **Work with experienced carriers** who handle UK customs regularly
### For compliance
1. **Register for UK VAT** when required
2. **File VAT returns on time** (quarterly)
3. **Keep detailed records** of all UK sales
4. **Monitor regulation changes** (UK customs rules evolve)
5. **Consider professional advice** for complex situations
## Resources
**UK government resources:**
* [Customs declaration service](https://www.gov.uk/guidance/customs-declaration-service)
* [UK Global Tariff](https://www.trade-tariff.service.gov.uk/)
* [Check duties and customs](https://www.gov.uk/check-duties-customs-exporting-goods)
* [VAT registration](https://www.gov.uk/register-for-vat)
* [EORI registration](https://www.gov.uk/eori)
**EU resources:**
* [EU-UK trade agreement](https://ec.europa.eu/info/strategy/relations-non-eu-countries/relations-united-kingdom/eu-uk-trade-and-cooperation-agreement_en)
* [Origin rules guidance](https://policy.trade.ec.europa.eu/eu-trade-relationships-country-and-region/countries-and-regions/united-kingdom/eu-uk-trade-and-cooperation-agreement/rules-origin_en)
## Next steps
# Shipping to USA
Source: https://docs.smartsend.io/knowledge/international-shipping/shipping-to-usa
Navigate US customs, Section 321 de minimis benefits, and requirements for shipments from the EU to the United States
**Scope of this guide.** This article focuses on shipments **from EU countries to the United States** to simplify the content. Rules differ for shipments originating from other countries or within the US.
The United States represents the world's largest e-commerce market, offering substantial opportunities for EU-based businesses. Understanding US customs requirements, particularly the favorable Section 321 de minimis threshold, enables cost-effective entry into this market.
## Why ship to the USA?
The US market offers compelling advantages:
**Market size:**
* Largest e-commerce market globally
* High consumer spending power
* English-language commerce (if you support English)
* Established payment infrastructure
**Favorable regulations:**
* High de minimis threshold (\$800)
* No VAT or sales tax on imports at federal level
* Streamlined customs for low-value shipments
* Predictable customs procedures
**Logistics infrastructure:**
* Extensive carrier networks
* Multiple delivery options
* Advanced tracking systems
* Reliable delivery standards
## US customs fundamentals
### De minimis threshold: Section 321
Section 321 of the US Tariff Act allows duty-free entry for shipments valued at **\$800 or less**:
**Key benefits:**
* No customs duties on qualifying shipments
* No formal customs entry required
* Simplified documentation
* Faster customs clearance
* Lower shipping costs
**Requirements to qualify:**
* Shipment value must be \$800 or less
* Value is based on retail price paid by consumer
* One shipment per person per day
* Proper documentation must be provided
* Shipment must not contain restricted items
**Calculation example:**
```
Product value: $750
+ Shipping costs: $30
= Total value: $780
✓ Qualifies for Section 321 (under $800)
```
**Section 321 is a major advantage.** Most e-commerce orders fall under \$800, making the US market more accessible than many other non-EU destinations. Structure your pricing to maximize orders under this threshold.
### Shipments over \$800
For shipments exceeding \$800:
**Required:**
* Formal customs entry
* Customs bond (continuous or single transaction)
* Customs broker services (recommended)
* Detailed commercial invoice
* Tariff payment based on HS code
**Costs:**
* Customs duties (varies by product, typically 0-37.5%)
* Merchandise Processing Fee (MPF): 0.3464% of value (min $27.75, max $538.40)
* Harbor Maintenance Fee: 0.125% (for ocean shipments)
* Customs broker fee: \$50-200+ per shipment
\*\*Complex procedures above $800.** Shipments over the de minimis threshold involve significantly more complexity and cost. Consider whether to serve this segment or focus on orders under $800.
## US tax considerations
### No federal VAT
The US does not have a federal VAT system:
* No VAT charged on imports
* No need to register for federal sales tax
* Import duties (when applicable) are the main customs charge
### State sales tax
US states may require sales tax collection:
**Economic nexus:**
Many states require sales tax collection if you exceed thresholds:
* Common threshold: \$100,000 in sales or 200 transactions per year
* Thresholds vary by state
* Apply independently to each state
**Practical implications:**
* If you exceed thresholds, must register in that state
* Collect sales tax at checkout
* File state sales tax returns
* Rates vary by state (0% to \~10%)
**Getting started:**
* Most small sellers start without state registration
* Monitor sales by state
* Register when approaching thresholds
* Consider using sales tax automation tools (Avalara, TaxJar, etc.)
**State sales tax is complex.** With 50 states plus territories, each with different rules, full compliance is challenging. Many international sellers start without registration and add states gradually as sales grow.
## Customs duties and tariffs
### US Harmonized Tariff Schedule
The US uses the Harmonized Tariff Schedule (HTS) to classify products:
**Structure:**
* Based on international HS system
* US uses 10-digit codes (HS is 6 digits internationally)
* More specific than standard HS codes
**Duty rates:**
* **Many products:** 0-5%
* **Clothing and textiles:** 10-32%
* **Footwear:** 5-48%
* **Electronics:** Often 0-3%
[Check US tariff rates](https://hts.usitc.gov/)
### Common duty-free products
Many product categories enter duty-free:
**Typically 0% duty:**
* Books and printed materials
* Many electronics (computers, phones)
* Certain toys and games
* Many sporting goods
* Industrial machinery
**Often subject to duties:**
* Clothing and apparel
* Footwear
* Handbags and leather goods
* Jewelry
* Watches
* Food products
### Section 301 tariffs
Be aware of additional tariffs on products from specific countries:
**China-origin goods:**
* Additional tariffs may apply (List 1-4)
* Rates vary (7.5% to 25% additional)
* Depends on specific product codes
* Check current status as rates change
**Other trade actions:**
* US periodically imposes additional tariffs
* Monitor trade policy developments
* May affect product sourcing decisions
## Required documentation
### For Section 321 shipments (under \$800)
**Essential documentation:**
**Commercial invoice:**
* Seller name and address
* Buyer name and complete US address
* Invoice number and date
* Detailed product descriptions
* Individual item values
* Total value
* Country of origin per item
**Shipping label:**
* Complete delivery address including ZIP code
* Return address
* Tracking number
**Electronic customs data:**
* Transmitted by carrier electronically
* Includes product details and values
* Linked to tracking number
### For formal entries (over \$800)
Additional documentation required:
**Required documents:**
* Power of attorney (for customs broker)
* US customs bond
* Complete commercial invoice with HS codes
* Packing list
* Entry form (filed by broker)
**Product-specific documents:**
May be required depending on product:
* FDA approval (food, drugs, cosmetics, medical devices)
* FCC certification (radio frequency devices)
* DOT compliance (vehicles, car seats)
* CPSC compliance (children's products)
* Certificates of origin
**Incomplete documentation causes delays.** US customs processes are largely automated for Section 321, but missing or incorrect information can cause significant delays. Ensure all product data is complete and accurate.
## Practical implementation
### Product data requirements
Add this information to all products in your system:
**Essential fields:**
* **HS code:** 6-digit minimum (US HTS 10-digit for formal entries)
* **Country of origin:** Where product was manufactured
* **Product description:** Detailed and specific (not generic)
* **Value:** Accurate retail selling price
* **Weight:** With and without packaging
* **Dimensions:** For shipping calculation
**Recommended fields:**
* Material composition (especially for textiles)
* Brand and manufacturer
* Intended use
* Product category
### E-commerce platform setup
**Shopify:**
1. Enable United States in Markets
2. Configure USD pricing
3. Add HS codes and country of origin to all products
4. Set up US shipping zones and rates
5. Consider using Shopify Markets for compliance
Configure customs information for US shipping in Shopify
**WooCommerce:**
1. Install international shipping plugins
2. Configure USD currency option
3. Add customs data to products
4. Set up US shipping zones
5. Consider tax plugins for state sales tax (if needed)
### Carrier selection
Choose carriers based on your needs:
**Express international carriers:**
* **FedEx International, UPS Worldwide, DHL Express**
* Best for valuable or time-sensitive items
* Excellent tracking and reliability
* Handle customs documentation
* Higher rates but comprehensive service
**Postal services:**
* **International postal services (e.g., PostNord, Bpost, Deutsche Post)**
* Most cost-effective for lighter packages
* Longer delivery times (7-21 days typical)
* Handoff to USPS for final delivery
* Good for low-value, non-urgent items
**Regional carriers:**
* May offer specialized routes
* Compare rates for your specific needs
Set up carriers for US shipping
### Pricing strategy
**Section 321 optimization:**
Structure your offering to maximize sub-\$800 orders:
**Single product under \$800:**
```
Product: $650
Shipping: $25
Total: $675 ✓ (No duties)
```
**Bundle pricing:**
```
2 items × $400 = $800
+ Shipping: $30
Total: $830 ✗ (Exceeds threshold)
Better approach:
2 items × $390 = $780
+ Shipping: $30
Total: $810 (Consider free shipping to stay under $800)
```
**Shipping costs:**
* Build shipping into product price when possible
* Offer free shipping above certain thresholds
* Keep total order value below \$800 for most orders
### Delivery times and expectations
**Typical transit times (EU to US):**
**Express:**
* 2-4 business days
* DHL, FedEx, UPS express services
* Higher cost but predictable
**Standard international:**
* 7-14 business days
* Reliable but slower
* Good balance of cost and speed
**Economy:**
* 10-21 business days
* Postal services
* Most economical option
* More variable delivery times
**Set customer expectations:**
* Clearly state estimated delivery times
* Account for customs processing time
* Provide tracking information
* Communicate delays proactively
## Delivery considerations
### US addresses
**Address format:**
```
Recipient Name
Street Address (number and street name)
Apartment/Suite number (if applicable)
City, State Abbreviation ZIP code
United States
```
**Important details:**
* Use two-letter state abbreviations (CA, NY, TX, etc.)
* ZIP code is critical for routing
* Apartment/suite numbers prevent misdelivery
* Validate addresses before shipping
### Delivery options
**Standard delivery:**
* USPS delivers to mailboxes and doors
* Signature usually not required for packages under certain value
* Safe place delivery common
**Signature options:**
* Available for valuable items
* Increases delivery success rate
* Adds cost to shipping
**Hold for pickup:**
* Many carriers offer pickup locations
* Useful for recipients without secure delivery location
* Popular in urban areas
### Refused or returned shipments
If shipment is refused or undeliverable:
**Costs:**
* You pay return shipping
* Original shipping not refunded
* May incur additional carrier fees
* Lost revenue and customer
**Prevention:**
* Validate addresses carefully
* Communicate clearly about delivery
* Provide tracking proactively
* Use appropriate delivery options
## Restricted and prohibited items
### Common restrictions
The US restricts many items:
**FDA-regulated products:**
* Food and dietary supplements (prior approval required)
* Cosmetics (must meet FDA standards)
* Medical devices (FDA clearance needed)
* Drugs and medications (prescription drugs prohibited)
**Other restricted items:**
* Agricultural products (USDA permits required)
* Alcohol and tobacco (heavily regulated)
* Weapons and ammunition
* Certain textiles (country-specific quotas)
**Prohibited items:**
* Counterfeit goods
* Items violating intellectual property
* Certain animal products
* Hazardous materials (restrictions vary)
[Check US import restrictions](https://www.cbp.gov/travel/us-citizens/know-before-you-go/prohibited-and-restricted-items)
**Severe penalties for violations.** Shipping prohibited items can result in seizure, fines, and loss of shipping privileges. Always verify products are allowed before offering US shipping.
### Product compliance
Certain products require compliance certification:
**FCC compliance:**
* Radio frequency devices
* Wireless products
* Bluetooth devices
* Must meet FCC standards before import
**CPSC compliance:**
* Children's products
* Must meet safety standards
* Third-party testing required
* Tracking labels mandatory
**Energy Star:**
* Voluntary for most products
* Required for some government sales
* Marketing advantage
## Best practices for US market
### For successful market entry
1. **Start with Section 321:** Focus on products and order values under \$800
2. **Price in USD:** Display US dollar prices for better conversion
3. **Use accurate HS codes:** Prevents customs issues and delays
4. **Partner with experienced carriers:** Choose carriers familiar with US customs
5. **Provide excellent tracking:** US customers expect detailed tracking information
### For compliance
1. **Complete product data:** HS codes, origin, detailed descriptions on all products
2. **Accurate valuations:** Use actual selling price, not arbitrary values
3. **Monitor state sales tax:** Track sales by state and register when reaching thresholds
4. **Stay updated on tariffs:** Section 301 and other trade actions evolve
5. **Keep good records:** Maintain documentation for at least 5 years
### For customer satisfaction
1. **Clear delivery times:** Set realistic expectations (7-14 days typical)
2. **Transparent pricing:** Show total cost including shipping upfront
3. **Responsive support:** Handle customs questions quickly
4. **Easy returns:** Consider US return options for serious market commitment
5. **Quality packaging:** Ensure products survive international transit
## Cost analysis
### Example cost breakdown
**Typical Section 321 shipment (€100 product):**
```
Product cost to customer: $110 (€100)
+ Shipping: $15-40 (depends on carrier and speed)
= Total customer cost: $125-150
Your costs:
- Product cost: €50
- Shipping cost: €10-25
- No customs duties
- No formal entry fees
= Total cost: €60-75
Gross margin: €25-40
```
**Shipment over \$800 (€900 product):**
```
Product cost to customer: $990 (€900)
+ Shipping: $40-80
+ Duty (example 5%): $49.50
+ MPF fee: $27.75 (minimum)
+ Broker fee: $75-150
= Total customer cost: $1,182-1,297
Significantly higher due to formal entry requirements
```
**Section 321 provides major savings.** The difference in costs and complexity between Section 321 and formal entries is substantial. Design your product offerings and pricing to maximize sub-\$800 orders.
## Common challenges and solutions
### Challenge: Customs delays
**Causes:**
* Incomplete documentation
* Random inspections
* Missing information
* Restricted product questions
**Solutions:**
* Provide complete, accurate information upfront
* Use experienced carriers
* Include detailed product descriptions
* Respond quickly to carrier requests
### Challenge: Lost packages
**Causes:**
* Long transit distances
* Multiple carrier handoffs (international + USPS)
* Address errors
**Solutions:**
* Offer tracking on all shipments
* Use reliable carriers
* Verify addresses carefully
* Provide insurance on valuable items
### Challenge: Customer service inquiries
**Causes:**
* Customers unfamiliar with international shipping
* Questions about customs and duties
* Delivery time expectations
**Solutions:**
* Create detailed FAQ
* Proactive tracking updates
* Clear information at checkout
* Responsive support team
## Resources
**US government resources:**
* [US Customs and Border Protection](https://www.cbp.gov/)
* [Harmonized Tariff Schedule](https://hts.usitc.gov/)
* [Section 321 information](https://www.cbp.gov/trade/trade-enforcement/tftea/section-321-programs)
* [Import restrictions](https://www.cbp.gov/travel/us-citizens/know-before-you-go/prohibited-and-restricted-items)
**Compliance tools:**
* [FDA import information](https://www.fda.gov/industry/import-basics)
* [FCC equipment authorization](https://www.fcc.gov/engineering-technology/laboratory-division/general/equipment-authorization)
* [CPSC business guidance](https://www.cpsc.gov/Business--Manufacturing/Business-Education)
**State sales tax:**
* [Streamlined Sales Tax](https://www.streamlinedsalestax.org/)
* Sales tax software: Avalara, TaxJar, Vertex
## Next steps
# Shipping within EU
Source: https://docs.smartsend.io/knowledge/international-shipping/shipping-within-eu
Learn about VAT, OSS, and regulations for shipping between EU member states
**Scope of this guide.** This article focuses on shipments between EU member states from the perspective of EU-based businesses. It covers B2C (business-to-consumer) sales primarily, with relevant B2B (business-to-business) information where applicable.
Shipping within the European Union offers significant advantages for e-commerce businesses. The EU single market eliminates customs duties and simplifies cross-border trade between member states. However, VAT regulations and compliance requirements must be understood and properly implemented.
## Benefits of the EU single market
The EU single market provides unique advantages for cross-border e-commerce:
### No customs duties
Goods move freely between EU member states without:
* Customs declarations
* Import duties
* Export documentation
* Border inspections
This makes intra-EU shipping almost as simple as domestic shipping from a customs perspective.
### Harmonized regulations
The EU provides consistent rules across member states:
* **Product safety standards:** CE marking applies throughout the EU
* **Consumer protection:** Uniform consumer rights and return policies
* **Data protection:** GDPR applies to all EU countries
* **Payment services:** PSD2 enables secure payments across borders
### Faster delivery
Without customs clearance delays:
* Predictable delivery times
* Lower risk of shipment delays
* Simpler tracking and logistics
* Better customer experience
**Start here.** If you're new to international shipping, intra-EU sales are the best place to start. The simplified procedures let you learn international logistics without the complexity of customs clearance.
## VAT in intra-EU trade
While customs duties don't apply, VAT regulations are critical for intra-EU shipments. The rules differ significantly between B2C and B2B sales.
### B2C sales (Business to Consumer)
When selling to consumers in other EU countries, you must charge VAT according to specific rules:
#### Distance selling thresholds
The EU's **One Stop Shop (OSS)** scheme simplified VAT for cross-border B2C sales:
**€10,000 annual threshold:**
* If your annual intra-EU sales are **below €10,000**, charge your home country's VAT rate
* If your annual intra-EU sales **exceed €10,000**, you must either:
* Register for VAT in each destination country, or
* Use the OSS scheme (recommended)
**Example:**
* A Danish webshop sells €8,000 to German customers and €5,000 to French customers annually
* Total intra-EU sales: €13,000 (exceeds threshold)
* Must charge German VAT on German sales and French VAT on French sales
* Should register for OSS to simplify compliance
#### OSS (One Stop Shop) scheme
The OSS scheme allows you to declare and pay VAT for all EU member states through a single quarterly VAT return in your home country:
**Benefits:**
* Single registration in your home country
* One quarterly VAT return covering all EU sales
* No need to register for VAT in each destination country
* Simplified compliance and administration
**How it works:**
1. Register for OSS in your home country
2. Charge the destination country's VAT rate at checkout
3. Submit a quarterly OSS return in your home country
4. Pay collected VAT to your tax authority
5. Your tax authority distributes VAT to destination countries
[Learn more about OSS registration](https://vat-one-stop-shop.ec.europa.eu/oss-registration_en)
**VAT rates vary by country.** Each EU member state sets its own VAT rates, which can range from 17% to 27% for standard rates. Furthermore not all products use the standard rate. Your e-commerce platform must calculate the correct rate based on the destination country and based on the product's VAT category.
#### Required information for B2C
To properly charge VAT on B2C sales:
* Customer's delivery address (determines VAT jurisdiction)
* Accurate product classification (some products have reduced VAT rates)
* Order value in euros
* Shipping costs (included in VAT calculation base)
### B2B sales (Business to Business)
Selling to businesses in other EU countries follows different VAT rules:
#### Reverse charge mechanism
For intra-EU B2B sales:
* You charge **0% VAT** (VAT exempt) on the invoice
* The buyer is responsible for declaring and paying VAT in their country
* This is called the "reverse charge mechanism"
**Requirements to apply reverse charge:**
* Customer must provide a valid VAT identification number
* Customer's VAT number must be verified through VIES
* You must issue a proper intra-community supply invoice
* You must report the transaction in your VAT return and INTRASTAT (if applicable)
#### VIES verification
The VAT Information Exchange System (VIES) allows you to verify EU VAT numbers:
1. Customer provides their VAT number (e.g., DE123456789)
2. Verify the number through the VIES online system
3. Keep proof of verification for your records
4. Issue invoice with 0% VAT if valid
VIES VAT number validation
**Keep verification records.** Always save proof that you verified the customer's VAT number and that it was valid at the time of the transaction. This protects you in case of tax audits.
#### Recapitulative statement (EC Sales List)
When making intra-EU B2B sales, you must submit a recapitulative statement:
* Lists all intra-community supplies during the period
* Shows customer VAT numbers and transaction values
* Submitted monthly or quarterly (depends on volume)
* Filed with your regular VAT return
## Shipping and logistics
### Carrier selection
Major carriers serve intra-EU routes well:
* **DHL, UPS, FedEx:** Premium service with good tracking
* **PostNord, Bring, GLS:** Cost-effective for Nordic and Northern Europe
* **DPD, Hermes:** Popular for Central and Western Europe
* **National postal services:** Often the most economical option
Always present the **last mile carrier** to the customer during checkout, as that is often a known and trusted company for them.
Set up carrier connections for EU shipping
### Documentation requirements
Intra-EU shipments require minimal documentation:
**Required:**
* Shipping label with full delivery address
* Commercial invoice (for value declaration)
* Proof of delivery (retained by carrier)
**Not required:**
* Customs declarations
* Export licenses
* Certificates of origin (for intra-EU trade)
## Practical implementation
### E-commerce platform setup
The required steps for setting up your ecommerce store for intra-EU sales depends on your e-commerce platform:
Learn how to configure Shopify for EU shipping
Set up WooCommerce for intra-EU sales
### Product data requirements
Prepare your product data for EU sales:
**Essential fields:**
* Product name and description
* Price in euros (or configured to convert)
* Weight and dimensions
* VAT category (standard, reduced, zero-rated)
* Country of origin (optional for intra-EU, but good practice)
**Not required for intra-EU:**
* HS codes (only needed for non-EU shipments)
* Customs value
* Export licenses
### Pricing strategy
Consider these factors when pricing for EU markets:
**Shipping costs:**
* Weight-based pricing for heavier items
* Flat-rate pricing for predictable margins
* Free shipping thresholds to increase average order value
**VAT display:**
* Display prices including VAT (required in B2C)
* Show VAT amount separately on invoice
* Be transparent about total cost at checkout
**Currency:**
* Price in euros for broadest appeal
* Consider local currency display for major markets
* Use real-time conversion rates if offering multiple currencies
### Common compliance mistakes
Avoid these frequent errors:
**Applying wrong VAT rate:**
* Using your home country rate instead of destination country rate
* Not recognizing reduced-rate products
* Applying B2B rules to B2C transactions
**Invalid B2B transactions:**
* Not verifying VAT numbers through VIES
* Failing to keep verification records
* Missing reverse charge references on invoices
**OSS reporting errors:**
* Not registering when threshold is exceeded
* Incorrect country allocation of sales
* Missing quarterly filing deadlines
## Special considerations
### Northern Ireland
Northern Ireland has special status post-Brexit where goods shipments between EU and Northern Ireland follow EU rules.
### EU overseas territories
Some territories are outside EU VAT territory and must be treated differently from EU countries:
* Canary Islands (Spain)
* Ceuta and Melilla (Spain)
* Åland Islands (Finland)
* Mount Athos (Greece)
Shipments to these territories may require customs procedures similar to non-EU shipments.
## Resources and tools
**EU official resources:**
* [OSS information and registration](https://vat-one-stop-shop.ec.europa.eu/)
* EU - VIES VAT number validation
* [EU - Taxes in Europe Database (TEDB)](https://ec.europa.eu/taxation_customs/tedb/#/home)
## Next steps
Once you've established intra-EU shipping, consider expanding to nearby markets:
# Understanding customs
Source: https://docs.smartsend.io/knowledge/international-shipping/understanding-customs
Learn about customs duties, VAT, the HS system, and customs identifiers for international shipping
International shipping involves navigating customs procedures, duties, and taxes that vary by country and product type. Understanding these requirements helps you provide accurate shipping costs to customers and ensures smooth delivery of international packages.
## What are customs, duties, and VAT?
When shipping internationally, your packages must clear customs in the destination country. This process involves three main types of charges:
### Customs duties
Customs duties are taxes imposed by governments on imported goods. These taxes protect domestic industries and generate revenue for the importing country.
**Key characteristics:**
* Calculated as a percentage of the goods' value (ad valorem) or as a fixed amount per unit
* Vary significantly by product type and country of origin
* Often subject to trade agreements and preferential rates
* Collected by customs authorities at the border
### VAT (Value Added Tax)
VAT is a consumption tax applied to goods and services, including imported products. Unlike duties, VAT is typically applied to the total value including duties and shipping costs.
**Key characteristics:**
* Applied to the final consumer price
* Rates vary by country (typically 15-25% in most countries)
* May be exempt for business-to-business transactions with proper documentation
* Collected by customs or tax authorities
### Customs processing
Customs processing refers to the administrative procedures required to clear goods through customs, including documentation, inspection, and classification.
**Key characteristics:**
* Requires proper documentation and declarations
* May involve physical inspection of goods
* Processing times vary by country and complexity
* Can result in delays if documentation is incomplete
**Check destination requirements.** Each country has specific customs requirements, documentation needs, and prohibited items. Always verify requirements before shipping to avoid delays or additional costs.
## The Harmonized System (HS)
The Harmonized System is an international standard for classifying traded products used by over 200 countries and territories. It provides a common language for customs authorities worldwide to identify and categorize goods by assigning unique codes to products based on their nature, composition, and intended use.
### Purpose of HS codes
* Facilitate international trade by providing consistent product classification
* Enable accurate duty and tax calculation
* Support trade statistics and analysis
* Ensure compliance with international trade agreements
### HS code structure
HS codes follow a hierarchical structure with increasing specificity:
**Chapter (2 digits):** Broad category of the product
**Heading (2 digits):** Sub-category within the chapter\
**Subheading (2 digits):** Specific type of the product within the heading
**Tariff Item (2-4 digits):** Detailed product classification (varies by country)
### HS code example
A laptop computer might be classified as HS code **8471.30.01.00**:
* **Chapter 84:** Nuclear reactors, boilers, machinery and mechanical appliances
* **Heading 8471:** Automatic data processing machines and units thereof
* **Subheading 8471.30:** Portable automatic data processing machines, weighing not more than 10 kg
* **Tariff Item 8471.30.01.00:** Laptop computers
**Country-specific variations.** While the first 6 digits of HS codes are standardized internationally, countries may add additional digits for more specific classification. Always verify the complete HS code required by the destination country.
## Identifying the sender
Customs authorities require proper identification of the sender to process international shipments. Different countries and regions use various customs identifiers:
### VAT number
A Value Added Tax identification number used primarily in EU countries and other jurisdictions with VAT systems.
**Usage:**
* Required for business-to-business shipments within the EU
* Enables VAT exemption for commercial shipments
* Format varies by country (e.g., GB123456789, DE123456789)
* Must be validated before use
### VOEC (VAT on E-commerce)
A Norwegian customs identifier for businesses selling goods to Norwegian consumers.
**Usage:**
* Required for shipments to Norway with value over 350 NOK
* Enables simplified customs procedures
* Must be registered with Norwegian tax authorities
* Format: 9-digit number (e.g., 123456789)
### EORI (Economic Operators Registration and Identification)
A unique identifier used in the EU for businesses involved in customs activities.
**Usage:**
* Required for all customs declarations in the EU
* Enables faster customs processing
* Format: Country code + business identifier (e.g., GB123456789000)
* Must be obtained from customs authorities
### Other customs identifiers
**IOSS (Import One-Stop Shop):** EU system for VAT collection on low-value imports
**DUNS number:** Used in some countries for business identification
**Business registration numbers:** Country-specific identifiers for commercial entities
**Tax identification numbers:** Various formats used globally for tax purposes
**Multiple identifiers may be required.** Depending on the destination country and shipment value, you may need to provide several different customs identifiers. Check requirements for each destination country.
## Best practices for customs compliance
* Use correct HS codes for all products
* Provide detailed product descriptions
* Check destination country restrictions before shipping restricted items
* Use a Transport Administration system to handle customs declarations
# Knowledge base
Source: https://docs.smartsend.io/knowledge/knowledge-base
Collection of in-depth articles about shipping related topics
Browse our in-depth articles about relevant topics.
Understanding pickup point networks and customer delivery optionsReturn shipment methods and cost-effective return solutionsLearn about customs duties, VAT, HS codes, and customs identifiersRecommended Shopify configuration for Scandinavian e-commerce
# Pickup Points in E-commerce
Source: https://docs.smartsend.io/knowledge/pickup-points
Parcel delivery to a pickup location of the customer choise
Use pickup points to provide customers with convenient, secure, and cost-effective delivery options. Pickup points are designated locations where customers can collect their packages at their convenience, offering an alternative to traditional home delivery.
## What are pickup points?
Pickup points are part of carrier networks that provide customers with flexible delivery options. Instead of delivering packages directly to a customer's address, carriers deliver to a nearby pickup location where customers can collect their packages when it suits them.
Smart Send integrates with carrier pickup point networks to bring these delivery options directly to your webshop checkout, allowing customers to choose their preferred pickup location during the ordering process.
## Types of pickup points
Pickup points can typically be devided into three main categories:
### Local post offices
Traditional postal facilities where customers can pick up packages during operating hours. These locations are typically part of the national postal service network and offer reliable, secure package collection.
### Relay points
Retail businesses that partner with carriers to offer parcel pickup services. These include convenience stores, supermarkets, and other local businesses that are part of the carrier's pickup network. Relay points provide extended hours and convenient locations for customers.
### Specialized parcel stores
Dedicated outlets operated by carriers specifically for parcel services. These stores offer drop-off, pickup, and return services with staff trained in package handling and customer service.
### Self-service lockers
Automated lockers located in accessible areas like shopping centers, parking lots, and metro stations. These lockers are available 24/7, allowing customers to pick up packages at any time using a unique code or mobile app.
## Benefits of pickup points
Offering pickup points as a delivery option provides significant advantages for both your business and your customers.
### Cost-effective shipping
For most carriers, shipping to pickup points is the most cost-effective delivery method. By consolidating deliveries to centralized locations, carriers can optimize their routes and reduce transportation costs. These savings are often passed on to retailers, making pickup point delivery an economical choice for your business.
### Faster delivery times
Pickup point delivery is typically faster than home delivery. With fewer individual stops and optimized routes, carriers can deliver packages to pickup points more efficiently, often resulting in shorter delivery times for your customers.
### Customer preference
Many customers prefer pickup point delivery, especially in urban areas where the pickup point network is well-developed. This delivery method offers:
* **Security**: Packages are stored safely until collection, eliminating the risk of theft or damage from being left unattended
* **Convenience**: Customers can collect packages at times that suit their schedule
* **Reliability**: No missed deliveries due to customer absence
* **Privacy**: Customers don't need to be home to receive packages
In cities with dense pickup point networks, customers often choose this option over home delivery, particularly when they prefer not to have packages left at their doorstep.
### No more failed deliveries
Pickup points eliminate the common problem of failed delivery attempts. Customers don't need to be present when packages arrive, reducing the need for redelivery attempts and improving overall delivery success rates.
### Environmental benefits
Centralized deliveries to pickup points can lead to more efficient delivery routes, potentially reducing the environmental impact of your shipping operations.
## Integration with your webshop
Smart Send seamlessly integrates pickup point options into your existing checkout flow. When customers reach the shipping selection step, they can choose from available pickup points near their delivery address and in some cases search alternatives eg. near their workplace. See details for the particular webshop system:
# Returns
Source: https://docs.smartsend.io/knowledge/returns
Return options and considerations in e-commerce
Return shipments allow customers to send purchased items back to your business. The way returns are handled varies significantly based on your business location, customer geography, and industry regulations. Smart Send helps you provide cost-effective return solutions using your existing carrier agreements.
## What are return shipments?
Return shipments are parcels sent back from customers to your business, typically for refunds, exchanges, or warranty claims. Unlike outbound shipments where you control the shipping process, returns require customers to initiate and often pay for the return shipping.
However, using your business carrier agreements for returns can provide significant cost savings compared to customers paying retail shipping rates, improving customer satisfaction while reducing return processing costs.
## Regional and business variations
Return handling requirements and best practices vary significantly across different regions and business categories:
### Geographic differences
* **EU regulations**: Right of withdrawal laws require specific return procedures
* **US market**: Return policies vary by state and business type
* **International returns**: Complex customs procedures and cost implications
* **Local markets**: Different carrier networks and pricing structures
### Business category considerations
* **Fashion/Apparel**: High return rates, size/fit issues, seasonal patterns
* **Electronics**: Warranty returns, technical support, refurbishment processes
* **Beauty/Health**: Hygiene regulations, limited return windows
* **Home/Decor**: Large items, fragile goods, specialized shipping requirements
**Check local regulations.** Return policies and procedures must comply with local consumer protection laws and business regulations in both your location and your customers' regions.
## Return shipment methods
There are several ways to handle return shipments, each with different advantages and implementation requirements:
### Pre-paid return labels
The most common and customer-friendly approach involves including a ready-to-use return label with the original shipment.
**How it works:**
* Generate return labels when creating outbound shipments
* Include return labels in the original package
* Customers use the pre-paid label to return items
* You handle all shipping costs upfront
**Benefits:**
* **Customer convenience**: No need to arrange shipping or pay return costs
* **Cost control**: Use your negotiated carrier rates instead of customer retail rates
* **Simplified process**: Customers just attach the label and drop off the package
* **Brand consistency**: Professional return experience
**Considerations:**
* Higher upfront costs (you pay for all potential returns)
* Requires accurate return volume forecasting
* May encourage unnecessary returns
### Digital return portal
A customer-facing system where customers can register returns and generate shipping documents themselves.
**How it works:**
* Customers access a return portal or login to your website
* Submit return request with reason and item details
* System generates return shipping documents and instructions
* Customers print labels or receive QR codes for carrier pickup
**Benefits:**
* **Cost efficiency**: Only pay for actual returns, not potential ones
* **Data collection**: Track return reasons and patterns
* **Flexibility**: Offer different return options (exchange, refund, store credit)
* **Inventory management**: Better control over return processing
**Considerations:**
* Requires technical integration and customer education
* Customers still need to handle packaging and drop-off
* May create friction in the return process
### QR code returns
Customers receive QR codes that can be scanned at carrier locations to generate return labels on-demand.
**How it works:**
* Generate QR codes when processing return requests
* Customers receive QR codes via email or SMS
* Scan QR codes at participating carrier locations
* Carrier prints return label and handles shipment
**Benefits:**
* **No printing required**: Customers don't need access to printers
* **Flexible timing**: Customers can return items when convenient
* **Reduced friction**: Simple scanning process at carrier locations
**Considerations:**
* Limited to carriers with QR code infrastructure
* Requires customer awareness of participating locations
* May have geographic limitations
### Return authorization codes
Customers receive authorization codes that can be used with specific carriers to create return shipments.
**How it works:**
* Issue return authorization codes for approved returns
* Customers contact carrier or visit carrier website
* Use authorization code to create return shipment
* Carrier bills return shipping to your account
**Benefits:**
* **Controlled access**: Only authorized returns are processed
* **Cost management**: You maintain control over return shipping costs
* **Fraud prevention**: Authorization codes prevent unauthorized returns
**Considerations:**
* Requires carrier partnership agreements
* More complex customer process
* Limited carrier support for authorization systems
## Cost considerations
Using your carrier agreements for returns can provide significant cost advantages:
### Shipping cost savings
* **Negotiated rates**: Use your business rates instead of customer retail rates
* **Volume discounts**: Leverage your shipping volume for better pricing
* **Service optimization**: Choose cost-effective return services
* **Bulk processing**: Consolidate return shipments for efficiency
### Operational benefits
* **Unified tracking**: Monitor both outbound and return shipments in one system
* **Simplified billing**: Single carrier relationship for all shipping
* **Consistent service**: Same quality and reliability for returns
* **Data integration**: Complete shipping data for business analysis
**Return fraud prevention.** Implement proper authorization and validation systems to prevent abuse of free return services, which can significantly impact your shipping costs.
## Implementation with Smart Send
Smart Send supports multiple return methods through your existing carrier connections:
### Pre-paid return labels
Generate return labels alongside outbound shipments using your carrier agreements and negotiated rates.
### Digital return solutions
Integrate return portals with your webshop to provide seamless customer return experiences.
### API integration
Use Smart Send's API to build custom return workflows that fit your specific business needs.
## Best practices
### Customer communication
* **Clear policies**: Provide transparent return terms and procedures
* **Easy access**: Make return information easily findable on your website
* **Status updates**: Keep customers informed about return processing
* **Multiple channels**: Offer various ways to initiate returns
### Process optimization
* **Return analytics**: Track return reasons and patterns to improve products
* **Inventory management**: Plan for returned items in your stock management
* **Quality control**: Inspect returns to identify product issues
* **Refurbishment**: Develop processes for reselling returned items when appropriate
### Cost management
* **Return forecasting**: Use historical data to predict return volumes
* **Service selection**: Choose appropriate shipping services for different return types
* **Consolidation**: Group returns when possible to reduce shipping costs
* **Fraud prevention**: Implement systems to prevent return abuse
# B2B sales
Source: https://docs.smartsend.io/knowledge/shopify/b2b-sales
Shopify recommendations for business-to-business shipping and VAT handling
Selling to business customers in the EU requires proper VAT handling. These recommendations cover VAT number validation and reverse charge configuration in Shopify.
## VAT number validation
Shopify can validate customer VAT numbers at checkout. When a valid EU VAT number is provided, the order can be tax-exempt under the reverse charge mechanism.
Enable **VAT number collection and validation** in your checkout. This automates tax exemption for eligible B2B orders within the EU.
Shopify verifies VAT numbers against the EU's VIES (VAT Information Exchange System) database in real-time during checkout.
See Collecting VAT numbers in the Shopify documentation.
## Reverse charge mechanism
When selling B2B within the EU (but across borders), the reverse charge mechanism means the buyer — not the seller — accounts for VAT. This requires:
1. A valid VAT number from the buyer
2. The buyer and seller are in different EU countries
3. The goods are shipped to the buyer's country
With VAT number validation enabled, Shopify automatically applies tax exemption when these conditions are met.
The reverse charge mechanism only applies to cross-border B2B sales within the EU. Domestic B2B sales still require you to charge local VAT.
## Limitations
Shopify's B2B-specific checkout (available on Shopify Plus) does not currently support VAT number validation at checkout. VAT validation is only available through the standard checkout flow.
If you use Shopify's dedicated B2B checkout, VAT number validation is not yet available. Use the standard checkout with VAT number collection enabled instead.
See Shopify changelog: Tax number validation at checkout for the latest updates on this feature.
## VIES verification
The VIES database is the official EU system for verifying VAT numbers. Shopify checks this database automatically when customers enter a VAT number at checkout. You can also verify VAT numbers manually.
See VIES VAT number validation on the European Commission website.
## Related resources
Automated VAT calculation and EU complianceVAT, customs, and regulations for intra-EU shipments
# B2C sales
Source: https://docs.smartsend.io/knowledge/shopify/b2c-sales
Shopify recommendations for business-to-consumer shipping
These recommendations help you optimize your Shopify store's shipping experience for consumer customers in Scandinavia.
## Free shipping threshold
Setting a minimum order value for free shipping is one of the most effective ways to increase average order value. Customers will often add items to their cart to qualify for free shipping.
Set a **free shipping threshold** and display it prominently in your store — especially in the cart. Showing progress toward free shipping (e.g., "Add 79 kr for free shipping") is a strong incentive.
Configure free shipping rates in **Settings > Shipping and delivery** in your Shopify admin.
Display the threshold in:
* **Announcement bar** — visible across your entire store
* **Product pages** — helps customers plan purchases
* **Cart page** — shows how close they are to qualifying
## Shipping method presentation
How you present shipping options at checkout affects conversion. Keep it simple and clear.
* Use descriptive names customers understand (e.g., "Home delivery" and "Pickup point" rather than carrier-specific names)
* Show estimated delivery times when available
* Limit the number of options to avoid decision fatigue — 2-3 choices is typically optimal
* Order options by popularity or recommendation
## Pickup points
Pickup points are a popular delivery method in Scandinavia. Many customers prefer picking up packages at a nearby store or parcel locker on their own schedule.
Enable **pickup points** as a delivery option. In Scandinavia, a significant share of consumers prefer pickup point delivery over home delivery.
See [Pickup points in Shopify](/integrations/shopify/pickup-points) for setup instructions with Smart Send.
## Tracking and delivery notifications
Keep customers informed about their delivery. Shopify sends order confirmation and shipping confirmation emails automatically, but carrier-level tracking provides more detailed updates.
Ensure **tracking numbers** are synced back to Shopify so customers can track their packages. Smart Send does this automatically when booking shipments.
Consider enabling SMS notifications through your carrier for delivery day updates, especially for home deliveries where the customer needs to be present.
## Related resources
Enable pickup point selection during checkoutOptimize your checkout for shipping
# Checkout
Source: https://docs.smartsend.io/knowledge/shopify/checkout
Our recommended Shopify checkout configuration
Shopify has a battle proven checkout page optimized for high conversion. There are some configurations that should be taken into account to ensure smooth operation.
Configure checkout settings in **Admin > Settings > Checkout** in your Shopify admin.
## Address validation
Enable *address autocomplete* so customers get live suggestions as they type their address. The user can select a suggestion or decide to type their address themselves.
Enable **Address autocompletion** in your Shopify checkout settings significantly reduces delivery issues caused by an incorrect address.
Configure this under **Admin > Settings > Checkout** **> Address collection preferences**.
See Address collection preferences in the Shopify documentation.
## Shipping address
### Billing and shipping address
Under **Admin > Settings > Checkout > Advanced preferences** **> Address collection**, enable the setting **Allow shipping and billing address to be different**. This lets customers specify a separate delivery address from their billing address, which is common for gift orders or business purchases.
Enable **Allow shipping and billing address to be different** so customers can ship to an address that differs from their billing address.
### What to require?
Under **Admin > Settings > Checkout > Customer information** , configure the following fields to match your business model:
| Field | Recommendation |
| - | - |
| **Full name** | **Require first and last name** — all carriers require the full name of the recipient. |
| **Company name** | **Optional** if you sell to both consumers and businesses (B2B and B2C). **Required** if you only sell B2B. **Don't include** if you only sell B2C. |
| **Company VAT number** | **Optional** if you sell to both consumers and businesses (B2B and B2C). **Required** if you only sell B2B. **Don't include** if you only sell B2C. |
| **Address line 2 (apartment, unit, etc.)** | **Optional** — useful for apartments and office buildings but not needed for all deliveries. |
| **Shipping address phone number** | **Required** — most European carriers either require a phone number or provide a significantly better delivery experience when one is available (delivery notifications, SMS updates, and contact in case of issues). |
Scandinavian addresses typically don't use state or province fields. Shopify handles this automatically based on the selected country.
## Shipping methods
Configure shipping methods in **Admin > Settings > Shipping and delivery** .
We recommend offering customers both home delivery and pickup point delivery at checkout. This gives customers flexibility while keeping your shipping setup straightforward.
If a customer enters a business address (with a company name) as the shipping address, you should hide the home delivery option and show a commercial delivery option instead. Commercial deliveries are typically handled differently by carriers and may have different pricing. Configure this under **Admin > Settings > Shipping and delivery > Shipping customizations** .
### Pickup points
Pickup point delivery lets customers choose a nearby service point where they can collect their parcel. This is a popular delivery option in Scandinavia.
To set up pickup point delivery, configure it in the Smart Send app. See the [pickup points setup guide](/integrations/shopify/pickup-points) for step-by-step instructions.
# International sales
Source: https://docs.smartsend.io/knowledge/shopify/international-sales
Recommended Shopify configuration for international sales and Shopify Markets
Selling internationally from Scandinavia requires careful configuration of markets, duties, and customs information. These recommendations help you set up Shopify for smooth cross-border sales.
## Shopify Markets
Shopify Markets lets you manage multi-country selling from a single store. You can configure pricing, currencies, languages, and domains for each market.
Use **Shopify Markets** to manage international selling. This gives you centralized control over pricing, currencies, and market-specific settings.
Configure this in **Settings > Markets** in your Shopify admin.
See Shopify Markets in the Shopify documentation.
## Duties and import taxes at checkout
For orders shipped outside the EU (or into countries with import duties), customers can be charged duties and import taxes at checkout. This is known as Delivered Duty Paid (DDP) and prevents customers from facing unexpected charges on delivery.
Enable **Collect duties and import taxes at checkout** to provide a DDP experience. This prevents customers from refusing deliveries due to unexpected customs charges.
See Duties and import taxes in the Shopify documentation.
## HS codes
International shipments require Harmonized System (HS) codes for customs declarations. Without HS codes, shipments can be delayed or returned at the border.
Add **HS codes** to all products you sell internationally. This is required for customs declarations and ensures shipments clear customs without delays.
Add HS codes to products in **Products > \[Product] > Customs information** in your Shopify admin.
See HS codes in the Shopify documentation.
Smart Send uses the HS codes from your Shopify products when generating customs documents for international shipments.
## Related resources
Configure customs information in Shopify for Smart SendLearn about customs duties, VAT, HS codes, and customs identifiersVAT, customs, and regulations for intra-EU shipmentsCustoms and VAT requirements for shipping to Norway
# Shopify recommendations
Source: https://docs.smartsend.io/knowledge/shopify/recommendations
Our recommended setup for a succesfull Shopify setup
It can be tricky to run a succesfull Shopify store and requirements change all the time. We have gathered some notes on how *we* suggest running a Shopify store most effectively in todays competitive ecommerce landscape. Read more on the different aspects below.
Address validation, phone numbers, and field configurationAutomated VAT calculation and EU complianceShopify Markets, duties, and HS codesFree shipping thresholds, pickup points, and delivery notificationsVAT number validation and reverse charge for business customersReturn handling and label generation
# Returns
Source: https://docs.smartsend.io/knowledge/shopify/returns
Shopify return handling recommendations with Smart Send
A smooth return process builds customer trust and encourages repeat purchases. These recommendations cover how to handle returns in Shopify with Smart Send.
## Shopify return handling
Shopify has built-in return management that lets you create and track returns directly from the order page. Use this as your starting point for return workflows.
Use Shopify's built-in **return management** to create returns from orders. This keeps your return data centralized and visible alongside order information.
Configure your return rules in **Settings > Policies** in your Shopify admin, and manage individual returns from the order detail page.
See Returns and refunds in the Shopify documentation.
## Return labels with Smart Send
Smart Send can generate return labels using your existing carrier agreements. This gives customers prepaid return labels at your negotiated shipping rates rather than retail prices.
Generate **return labels through Smart Send** to use your carrier agreements. This is typically cheaper than having customers arrange return shipping themselves.
Return labels can be:
* **Included in the original shipment** — for a frictionless return experience
* **Sent on request** — to reduce costs by only generating labels for actual returns
## Return policy recommendations
For Scandinavian e-commerce, consider these return policy practices:
* **Clear return window** — EU regulations require a minimum 14-day right of withdrawal for online purchases
* **Easy-to-find policy** — link your return policy from the footer, order confirmation, and FAQ
* **Simple process** — minimize the steps customers need to take to initiate a return
* **Free returns consideration** — while costly, free returns can increase conversion and customer loyalty
EU consumer protection law gives customers a 14-day right of withdrawal for online purchases. This is a legal requirement, not a policy choice.
## Related resources
In-depth guide to return shipment methods and strategiesSet up carrier agreements for return labels
# Tax and VAT
Source: https://docs.smartsend.io/knowledge/shopify/tax-and-vat
Recommended Shopify tax and VAT configuration for EU compliance
Correct tax and VAT configuration is essential for EU compliance and a smooth customer experience. These recommendations cover automated VAT calculation and invoicing for Scandinavian merchants.
## Enable Shopify Tax
Shopify Tax provides automated, destination-based VAT calculation. This ensures the correct VAT rate is applied based on where your customer is located, which is required under EU VAT rules.
Enable **Shopify Tax** for automated VAT calculation. This handles destination-based VAT rates across EU countries automatically.
Configure this in **Settings > Taxes and duties** in your Shopify admin.
See Shopify Tax in the Shopify documentation.
## VAT invoices
EU and UK regulations require VAT invoices for many transactions. Shopify can generate these automatically.
Enable **VAT invoices** in your tax settings. This ensures compliance with EU/UK invoicing requirements without manual effort.
See VAT invoices in the Shopify documentation.
## One Stop Shop (OSS)
If you sell to consumers in other EU countries, the One Stop Shop (OSS) scheme simplifies VAT reporting. Instead of registering for VAT in each country, you report and pay VAT through your home country's tax authority.
With Shopify Tax enabled, destination-based VAT rates are applied automatically — which is a requirement when using the OSS scheme.
The OSS scheme applies when selling to consumers (B2C) in other EU member states. B2B sales with valid VAT numbers use the reverse charge mechanism instead.
See EU taxes in the Shopify documentation.
## Related resources
VAT, customs, and regulations for intra-EU shipmentsVAT number validation and reverse charge for business customers
# Warehouse management
Source: https://docs.smartsend.io/knowledge/warehouse-management
Foundations for picking, packing, and shipping efficiently as your business grows
When you ship a few orders a day, almost any warehouse setup works. As volume grows, the time spent finding items, picking the wrong variant, and correcting shipping mistakes scales with you, and the cost of a disorganised warehouse compounds. Good warehouse management is the foundation for keeping picking, packing, and error handling fast and predictable as you grow.
This page covers three building blocks that pay off early and keep paying off: barcodes, SKU design, and bin locations.
## Barcodes
A barcode is a machine-readable identifier printed on a product or package. Globally standardised barcodes such as **EAN** (used internationally) and **UPC** (used in North America), as well as **ISBN** for books, are assigned by the manufacturer and are usually already on the product packaging when it arrives at your warehouse.
Using barcodes during picking and packing reduces errors dramatically. Scanning a barcode is faster than reading a label and confirms the right product is being picked or shipped, instead of relying on visual inspection alone.
A few practical points:
* Reuse the manufacturer barcode when one exists. There is no need to print your own.
* For products without a manufacturer barcode (private label, bundles, custom items), assign your own internal barcode.
* Make sure the barcode on the product matches the barcode stored on the product record in your shop or inventory system.
For a deeper look at barcodes in an e-commerce context, see Shopify's guide on barcodes for products and variants .
If you run your warehouse on Shopify, the first-party Retail Barcode Labels app designs and prints barcode labels straight from your products and variants. See Shopify's documentation for the app to set it up.
## SKU design
A **SKU** (*Stock Keeping Unit*) is the internal code you use to identify a specific product variant in your own systems. Unlike a barcode, the SKU is yours to design.
A good SKU scheme makes it immediately clear which product and which variant a code refers to, both to a human picker and to the systems that move the data around.
Principles for designing SKUs:
* **Distinguish product and variant.** Two different products should never share the same SKU, and the same product in different sizes or colours should have clearly different SKUs.
* **Keep them readable.** Short, structured codes are easier to scan, type, and discuss over the phone than long random strings.
* **Use a consistent structure.** A pattern such as `CATEGORY-PRODUCT-VARIANT` (for example `TSHIRT-LOGO-RED-L`) lets staff infer what a SKU represents without looking it up.
* **Avoid characters that cause trouble.** Spaces, slashes, and characters that look alike (`O`/`0`, `I`/`1`) lead to mistakes when SKUs are typed or read aloud.
* **Stay stable.** Once a SKU is assigned, do not reuse it for a different product later. Historical orders, returns, and accounting records refer back to it.
A SKU is not a barcode. The two often coexist: the barcode identifies the physical item at scanning time, and the SKU identifies the same item in your shop, inventory, and order systems.
## Bin locations
A **bin location** is the address of an item inside your warehouse. A clear bin-location system tells a picker exactly where to walk, in what order, and what to grab when they get there.
A common scheme combines area, aisle, shelf, and bin:
```
A-12-3-B
│ │ │ │
│ │ │ └─ Bin within the shelf
│ │ └──── Shelf level
│ └─────── Aisle number
└───────── Area or zone
```
We call this **the IKEA model**: anyone who has hunted down a flat-pack box in the self-service warehouse using the aisle and bin number on its tag already knows exactly how it works.
Guidelines for designing a bin-location system:
* **Make it predictable.** Pickers should be able to walk to any location given only its code, without a map.
* **Make it dense enough.** Each location should be small enough that a picker quickly finds the right item, but not so small that you create thousands of nearly-empty bins.
* **Order locations by walking path.** Numbering aisles and bins in the order a picker walks them lets you sort a pick list by location and finish the route in one pass.
* **Allow multiple locations per SKU.** Fast-moving products can occupy a primary forward-pick bin and a bulk reserve bin elsewhere.
* **Keep the system in your shop or inventory tool.** When the bin location is on the order or pick list, the picker does not need to memorise where things live.
As your assortment grows, a deliberate bin-location system is what keeps picking time roughly constant instead of scaling with the size of the warehouse.
## Putting it together
Barcodes, SKUs, and bin locations work together. The pick list tells the picker which SKU to pick and where to find it (bin location). When the picker arrives, they scan the barcode to confirm the right item is being picked. At packing, scanning the barcode again verifies the right item goes into the right order before the shipping label is printed.
Investing in these basics early is far cheaper than untangling them later, when every change has to be applied to thousands of products and historical records.
# Gift cards, coupons and credit
Source: https://docs.smartsend.io/knowledge/woocommerce/gift-cards-coupons-and-credit
Distinguish prepaid value from discounts, and check their effects on WooCommerce shipping prices and booked shipment values.
Gift cards, vouchers, coupons and store credit can produce different order data even when the customer's final payment looks the same. Separate the value of the goods, the shipping price shown at checkout, and the amount still to pay.
## Choose the right concept
| Type | Typical purpose | Example |
| - | - | - |
| Gift card | Prepaid value redeemed on a later purchase. | A customer buys a 500 DKK gift card for a friend. |
| Voucher | A code or entitlement for a product, service or fixed value; its implementation can vary. | A promotion offers one free product. |
| Coupon | A discount on a new purchase, including a possible free-shipping condition. | WELCOME10 reduces eligible product prices by 10%. |
| Store credit | A customer balance available for future purchases. | A customer receives 200 DKK of credit after a return. |
Paying with a balance is not inherently a discount on the goods. The extension implementing that balance determines how it is represented in WooCommerce.
## Check checkout shipping separately
Smart Send's price and free-shipping rules use WooCommerce cart values and qualifying coupon information. A discount can move the cart below a free-shipping threshold. A coupon's free-shipping permission must also match the selected method's configured conditions; the mere existence of a coupon does not make every service free.
Follow the [shipping configuration examples](/integrations/woocommerce/shipping-methods#examples) for exact settings, tax assumptions and expected checkout results.
## Check the booked shipment value
Smart Send reads post-discount item amounts and order totals when preparing a booking. Gift-card payment needs separate attention: WooCommerce Gift Cards redemptions are currently not added back to the shipment-level value, so an order funded by a gift card can have an understated shipment value.
See the canonical [gift-card compatibility limitation](/integrations/woocommerce/introduction#gift-cards) before using those values for customs or value-dependent carrier services. Do not assume a different voucher or store-credit extension represents balances in the same way.
When evaluating your configuration, compare an ordinary paid order, a discounted order and an order paid partly or fully with the balance. Check the checkout shipping price and the shipment's value as separate outcomes. Resolve discrepancies before booking a shipment that depends on those values.
# Subscriptions
Source: https://docs.smartsend.io/knowledge/woocommerce/subscriptions
Plan fulfillment of recurring WooCommerce orders and review each renewal before booking its shipment.
Subscription commerce separates the recurring agreement from each delivery. WooCommerce Subscriptions manages the agreement and creates renewal orders; Smart Send books shipments for the orders you choose to fulfill.
The initial purchase and each renewal need their own shipment. A previous label or tracking number belongs to its original shipment and must not be reused for a later delivery.
## Prepare a renewal for shipping
Open the initial or renewal order in **WooCommerce → Orders**. Check that its payment and status meet your shop's fulfillment process.
Check the recipient address, shipping service, pickup point, items and weights on that order. A recurring agreement does not remove the need to check changed addresses, unavailable pickup points or changed quantities.
Follow [Book a shipping label](/integrations/woocommerce/shipping-labels#ready). If a saved colli allocation requires a reset, [rebuild it using the renewal's current items](/integrations/woocommerce/shipping-labels#allocation-error) before booking.
Confirm the booking result and its new tracking information. The [order note appears after a full page reload](/integrations/woocommerce/shipping-labels#order-note-after-reload).
## Integration scope
Smart Send uses the Subscriptions renewal-data APIs to preserve reusable delivery configuration, exclude previous booking results, and map saved colli allocations to new order lines. It does not automatically book labels when renewals are created.
See [WooCommerce Subscriptions compatibility](/integrations/woocommerce/introduction#subscriptions) for the supported API baseline and testing limitation. Verify both the first order and an actual renewal with your shop's Subscriptions setup. Token validation and checkout checks can be performed without creating a shipment; an actual booking creates one unless you have explicitly configured a test environment.
# Tracking in WooCommerce
Source: https://docs.smartsend.io/knowledge/woocommerce/tracking
Understand the roles of booking records, carrier tracking and customer notifications in a WooCommerce shipping workflow.
A shipping workflow has several distinct events: the shop books a shipment, a tracking number becomes available, the carrier handles the package, and the customer receives information. One event does not guarantee that all the others have happened.
## Three places for tracking information
| Place | Purpose |
| - | - |
| Smart Send's booking result and WooCommerce order note | Record the shipment, returned documents and available tracking links for the merchant. |
| The shipment's tracking link | Show delivery progress as the carrier reports events. |
| Customer account and order email | Present tracking to the customer through the shop's configured tracking extension and templates. |
Smart Send's **Booked shipments** history lists bookings. It is not a live display of carrier scans. A freshly created label can exist before the carrier has received the package.
## Customer-facing tracking
WooCommerce Shipment Tracking is a separate, optional extension. When its API is available, Smart Send passes outbound parcel tracking to it after booking. The extension and your WooCommerce configuration determine where that information appears for the customer.
A private booking note is not itself an email to the customer. A configured order-status change can trigger WooCommerce emails, so review the actual status workflow and email templates together. Smart Send/carrier notifications, if configured separately, should also be considered when deciding what the customer receives.
Use the [WooCommerce tracking guide](/integrations/woocommerce/shipping-labels#history) for steps to find a shipment, reload native order notes, and check the optional extension handoff. For the broader service, see [Smart Send tracking](/features/tracking).
# Incident history
Source: https://docs.smartsend.io/status/incidents
Historical overview of platform incidents and service disruptions
This page provides a historical record of incidents that have affected the Smart Send platform. Each incident includes details about the issue, its impact, and resolution.
For real-time status updates, check the [Status](/status/status) page.
### GLS booking timeouts
**Resolved** — June 2, 2026, 08:15 CEST.
**Started:** June 2, 2026, around 07:40 CEST
GLS experienced performance issues on one of its servers, causing requests to time out when booking labels. The disruption affected all GLS customers.
The issue was caused by server performance problems on the GLS side and has since been resolved.
**Impact:** Booking GLS labels failed or timed out for the duration of the incident.
### PostNord booking timeouts
**Resolved** — May 29, 2026, 16:15 CEST.
**Started:** May 29, 2026, around 11:00 CEST
PostNord experienced network issues that caused requests to time out. The disruption affected PostNord shipment booking across all platforms — not only Smart Send — and impacted all PostNord customers.
PostNord has not reported a root cause. The issue has since been resolved.
**Impact:** Booking PostNord shipments failed or timed out for the duration of the incident.
### Missing PostNord service points
**Resolved** — January 9, 2026.
**Started:** January 6, 2026
Some PostNord service points were missing from the list of available pickup points during checkout.
The cause was traced to our daily synchronization, where some pickup points failed validation and were dropped from the dataset. We have corrected the handling, and everything is now back to normal.
**Impact:** Some PostNord pickup points were not displayed in the list of available pickup points during checkout.
# Status
Source: https://docs.smartsend.io/status/status
Smart Send platform Status
We use an external status monitoring tool that continuously monitors our platform and reports any issues in real-time.
We recommend signing up for status updates at our status page to receive notifications about any service disruptions or maintenance windows.
# Error Codes
Source: https://docs.smartsend.io/troubleshooting/errors
List of possible error codes and how to resolve them
This page lists common error codes you might encounter when using Smart Send and provides step-by-step solutions to resolve them.
## AuthenticationException
This error occurs when the API Token saved in the plugin is not correct or if the Smart Send account has been closed.
**How to fix:**
Start by logging into the Smart Send platform .
Verify that you have a valid subscription
Check that the API Token in the plugin is correct. The API Token was sent to you in your welcome email, and can also be found in your account settings
The error message will tell you both what URL you are currently trying to use the API Token for and what URL you have registered on your Smart Send account. These URLs have to be 100% identical before the API token will work
To change the URL of the website go to the settings page
## AuthorizationException
This error usually occurs when you are trying to use a feature you do not have access to.
This can either be because your trial has expired or you are on a Standard subscription and trying to use a feature that requires Professional subscription.
**How to fix:**
Start by logging into the Smart Send platform .
Go to **Billing**
Verify that you have an active subscription covering the requested feature
Upgrade to one of the subscription plans that include the requested feature
## BookingException
We were unable to book the shipment with the carrier. This is usually because of incorrect data or the carrier is experiencing problems with their IT.
**How to fix:**
1. Verify that all shipment data is correct and complete
2. Check that the carrier service is operational
3. Try again after a few minutes if the carrier is experiencing temporary issues
4. Contact support if the problem persists
## CarrierAuthenticationException
This error occurs when the carrier credentials entered in the Smart Send user profile is invalid. This usually occurs if the carrier password has been changed.
**How to fix:**
1. Enter valid credentials for the carrier you are trying to generate labels for
2. Update the carrier account information in the Smart Send user profile
3. Verify that the credentials are correct with your carrier account
## ValidationException
The data provided failed validation.
This error occurs when the data provided does not pass validation at Smart Send. This means that some data is incorrect, and needs to be fixed before making a new API call.
**How to fix:**
1. Check the error message for details about which field(s) failed validation
2. Fix the field mentioned in the error message
3. Ensure all required fields are provided and in the correct format
4. Try to create a new label with the corrected data
# FAQ
Source: https://docs.smartsend.io/troubleshooting/faq
Frequently asked questions about Smart Send
## Getting started
Yes, Smart Send offers a 10-day free trial.
You can sign up on their website and start a free trial.
A free trial is available, which can serve as a demo.
Smart Send can be setup within a couple of minutes, if you have your carrier information.
Yes, it is designed to streamline shipping for webshops of all sizes.
No minimum volume is mentioned; suitable for all sizes.
Simplifies shipping processes, integrates with popular carriers, and offers easy label printing and tracking.
## Pricing and billing
No. There is no price per label at Smart Send. Your subscription determines which features you have access to but you will never be charged per label.
No. Smart Send only provides the integration between you and your carrier. Smart Send does not sell either freight or shipping labels.
You can create a subscription either by clicking the Signup now button in the top of your screen or through the **Billing** section from the menu when logged into our system.
See [Create subscription](/fundamentals/billing#create-subscription) for the step-by-step guide.
You can change the subscription the same place as you create it - **Billing** section.
Simply click change subscription and choose the new one.
See [Manage subscription](/fundamentals/billing#manage-subscription) for the step-by-step guide.
You can cancel your subscription the same place as you created it. **Billing** section.
Simply click cancel on the subscription page.
You will have access to all our the paid features for the remaining time of your current subscription period. Once the subscription period is over you will lose access.
See [Cancel a subscription](/fundamentals/billing#cancel-a-subscription) for the step-by-step guide.
You can choose a pricing plan that fits your needs after the trial.
Shipping costs can be specified based on price, weight, and receiver country.
## Carriers and shipping
Yes. You can easily enter and use several shipping companies for the same webshop. Login to your Smart Send account and select **Carrier Accounts** in the menu in the top right corner. Here you can connect all your carriers.
Smart Send supports PostNord, GLS, DAO, Bring, Budbee, and Burd.
Contact the carrier directly to get an agreement.
See more info in [Carrier Connections](/fundamentals/carrier-connections).
Yes, you can integrate with multiple carriers at once.
It is designed to easily switch between integrated carriers.
Yes, Smart Send allows sending parcels worldwide.
Yes, tracking information is included with every shipment.
There can be a delay from we send the data to the carrier until it appear on their website/system.
If you still cannot see the bookings after some time, contact our support.
## Integrations and platforms
Yes, it supports multiple webshop integrations.
Yes, shipping labels can be printed directly from the backend of your webshop.
Yes, you can set up various shipping methods, prices, weight limits, and receiver countries.
Yes, various shipping options can be offered to customers.
Customers can select a pickup point during checkout using the integrated Google Maps API.
No, Smart Send includes the Google Maps API setup.
By using an integrated Google Maps API.
## Account management
All information about your user can be updated in **User profile settings** , and team information in **Team settings** .
For security reasons then Smart Send cannot change your login information on your behalf once you have added personal information, created labels etc.
You can always change your password by using the **forgot password** page.
Yes. You can export your shipments from the **Shipments** tab. Press the arrow from next to export and chose Excel.
Detailed information is available on our website and support pages.
## Shipments and labels
It is not possible to delete shipments in the Smart Send system once a label is booked.
The booking data is sent immediately to the carriers and hence we cannot delete it afterwards. Note however that usually only actually shipped packages are invoiced by the carrier, so unused labels you have booked will not cost you anything.
If you have booked an Ad hoc pickup, you need to cancel the pickup separately with the carrier.
Each carrier has their own accepted length of both receivers name and street address.
Smart Send will show you a message if the input does not match the carriers specific rules. Please adjust the order and then book the label again.
The labels are created by the carriers themselves, Smart Send only handles the data transfer to the carrier and has no control over the layout of the label itself.
This means the carriers decide what is the correct amount of text and how to print it on the label.
## Customs and international
VOEC (*VAT On E-Commerce*) numbers are unique identifiers issued by the Norwegian Tax Administration to businesses selling low-value goods to consumers in Norway. The VOEC scheme allows foreign sellers and online marketplaces to collect and remit Norwegian VAT at the point of sale, simplifying customs clearance and ensuring compliance with Norwegian tax regulations.
Providing your VOEC number to Smart Send is important because it enables the correct declaration of your shipments to Norway. When you include your VOEC number, customs authorities can process your parcels more efficiently, reducing the risk of delays or additional charges for your customers.
See how you add a VOEC customs number to your Smart Send account [here](/fundamentals/sender-information#customs-numbers).
Incoterms (*International Commercial Terms*) are standardized trade terms published by the International Chamber of Commerce (ICC) that define the responsibilities of buyers and sellers for the delivery of goods in international transactions. They clarify who is responsible for shipping, insurance, import duties, and other logistics.
In ecommerce, the most relevant Incoterms are DDP (Delivered Duty Paid) and DAP (Delivered at Place):
DDP (Delivered Duty Paid): The seller is responsible for all costs and risks, including shipping, insurance, and import duties, until the goods reach the buyer's address. The buyer receives the goods without paying additional customs charges.
DAP (Delivered at Place): The seller delivers the goods to the destination, but the buyer is responsible for import duties and taxes upon arrival. The buyer may need to pay customs charges before receiving the shipment.
Choosing DDP as the Incoterm means the customer pays all costs upfront and will not face additional charges at delivery, which improves conversion by providing a smoother buying experience.
Special Drawing Rights (SDR) are international reserve assets created by the International Monetary Fund (IMF) to supplement member countries' official reserves. SDRs, introduced in 1969, are not a currency but represent a potential claim on freely usable currencies of IMF members, with their value determined by a basket of major currencies. SDRs help bolster reserve positions, facilitate currency exchanges, and aid in debt repayment. The table below provides the approximate exchange rate of 1 SDR and the value of 300 SDR in various currencies.
| Currency | Exchange Rate per SDR | Approx. value of 300 SDR |
| - | - | - |
| Danish Krone (DKK) | 9.86 | \~3000 DKK |
| Swedish Krona (SEK) | 11.56 | \~3500 SEK |
| Norwegian Krone (NOK) | 11.90 | \~3500 NOK |
| US Dollar (USD) | 1.41 | \~400 USD |
| Euro (EUR) | 1.27 | \~350 EUR |
Note: Exchange rates are approximate and can fluctuate based on market conditions. See current rates [here](https://www.imf.org/external/np/fin/data/rms_five.aspx)
Harmonized Tariff Codes (*HS Codes*) are international product classification codes used by customs authorities worldwide to identify and categorize goods for import/export purposes. The HS system provides a standardized way to classify products, enabling accurate duty calculation and trade statistics.
**Structure of HS Codes:**
* **Chapter (2 digits):** Broad category of the product
* **Heading (2 digits):** Sub-category within the chapter
* **Subheading (2 digits):** Specific type of the product within the heading
* **Tariff Item (2-4 digits):** Detailed product classification (varies by country)
Example: A laptop computer might be classified as HS code 8471.30.01.00:
Chapter 84: Nuclear reactors, boilers, machinery and mechanical appliances
Heading 8471: Automatic data processing machines and units thereof
Subheading 8471.30: Portable automatic data processing machines, weighing not more than 10 kg
Tariff Item 8471.30.01.00: Laptop computers
HS codes are essential for international shipping as they determine applicable duties, taxes, and regulatory requirements for your products.
For more details, see the official [WCO HS Nomenclature 2022 Edition](https://www.wcoomd.org/en/topics/nomenclature/instrument-and-tools/hs-nomenclature-2022-edition/hs-nomenclature-2022-edition.aspx).
## General
This issue can occur when your browser has not loaded the frontend assets correctly. The problem can be resolved by performing a *hard refresh*, which instructs the browser to fetch the assets again instead of using a corrupted cached version.
**How to perform a hard refresh:**
**On Windows:**
* Press `⌃ (Ctrl)` + `F5`
* Or press `⌃ (Ctrl)` + `⇧ (Shift)` + `R`
**On Mac:**
* Press `⌘ (Cmd)` + `⇧ (Shift)` + `R`
* Or press `⌘ (Cmd)` + `⌥ (Option)` + `R`
After performing a hard refresh, Smart Send should display correctly with all visual elements and functionality restored.
# Glossary
Source: https://docs.smartsend.io/troubleshooting/glossary
Commonly used words and phrases in Shipping and E-Commerce Logistics
## 0-9
### 3PL (Third-Party Logistics)
A company that handles order fulfillment and shipping on behalf of an e-commerce business.
## A
### AWB (Air Waybill)
A document used for air freight shipments, containing tracking and shipping details.
### Address Validation
A process to ensure delivery addresses are correct and complete before shipping.
## B
### Barcode
A machine-readable code used to scan and track parcels throughout the shipping process.
### Bill of Lading (BOL)
A legal document between the shipper and carrier that details the goods being transported and serves as a receipt.
### BOPIS (Buy Online, Pick Up In Store)
An order fulfillment method where customers purchase online and pick up their orders in a physical location.
### Broker (Customs Broker)
A licensed professional who handles customs clearance and compliance for international shipments.
## C
### Carrier
The company responsible for transporting packages (e.g., PostNord, GLS, Bring).
### CN22 / CN23
Customs declaration forms required for shipping goods outside the EU, based on value and content.
### Consolidation
Combining multiple smaller shipments into a single larger one to reduce costs and simplify customs.
### CPT (Carriage Paid To) (Incoterm)
Seller pays for transport to destination; risk transfers once goods are handed to the carrier.
### CFR (Cost and Freight) (Incoterm)
Seller pays transport to port of destination; risk transfers when goods are loaded onto the vessel.
### CIF (Cost, Insurance and Freight) (Incoterm)
Same as CFR, but seller also provides insurance for the buyer.
### CIP (Carriage and Insurance Paid To) (Incoterm)
Seller pays transport and insurance to destination; risk transfers to buyer once handed to carrier.
### Customs Clearance
The process of declaring goods to border authorities for import/export, including submitting forms and paying duties.
### Customs Duty
A tax imposed by a country on imported goods, based on product type, value, and country of origin. Customs duties are used to protect domestic industries and generate government revenue. The rate varies depending on the product's HS code and where it was manufactured. Also commonly referred to as "duty" or "import duty."
## D
### DAP (Delivered At Place) (Incoterm)
Seller delivers goods to the buyer's country; buyer pays duties and taxes.
### DDP (Delivered Duty Paid) (Incoterm)
Seller is responsible for all costs, including customs duties and taxes, until delivery.
### Declared Value
The stated value of goods in a shipment, used for customs and insurance.
### Delivery Confirmation
A service where proof of delivery (such as a signature or scan) is provided by the carrier.
### Dimensional Weight
A pricing method based on a package's volume rather than its actual weight.
### DPU (Delivered at Place Unloaded) (Incoterm)
Seller delivers and unloads goods at the destination; buyer pays import duties and taxes.
### Duty
An alternative term for [customs duty](#customs-duty).
## E
### EORI Number
A unique identification number required for businesses exporting/importing goods outside the EU.
### ETA (Estimated Time of Arrival)
The expected delivery time for a shipment.
### Excise Duties
Indirect taxes on the sale or use of specific products such as alcohol, tobacco, energy products, and electricity. These duties are used to discourage consumption of certain goods, generate government revenue, and address public health or environmental concerns.
### EXW (Ex Works) (Incoterm)
Buyer handles all shipping, from pickup at the seller's premises to delivery.
## F
### FAS (Free Alongside Ship) (Incoterm)
Seller delivers goods to the port and places them next to the ship; buyer is responsible from there.
### FCA (Free Carrier) (Incoterm)
Seller delivers goods to a location or carrier chosen by the buyer; buyer handles transport from there.
### FOB (Free On Board) (Incoterm)
Seller loads goods onto the vessel; risk passes to buyer once goods are aboard.
### Fulfillment
The process of receiving, packing, and shipping customer orders.
## H
### Handling Fee
An extra charge for processing, packaging, or handling a shipment.
### HS Code (Harmonized System Code)
An international product classification code used for customs declarations.
## I
### Import Duty
An alternative term for [customs duty](#customs-duty).
### Incoterms®
A set of international rules that define the responsibilities of buyers and sellers in global trade.
### Insurance
Optional coverage that protects a shipment against loss or damage during transit.
### Invoice (Commercial Invoice)
A document used in international shipping that lists the goods, their value, and HS codes.
## L
### Label (Shipping Label)
A document that includes sender and recipient info, tracking number, and barcode, attached to every parcel.
### Last Mile Delivery
The final step of the shipping process — from the carrier's depot to the customer's door.
## M
### Manifest
A summary of all parcels in a shipment, typically generated for batch pickups.
## O
### Origin Country
The country where the goods are manufactured or shipped from.
## P
### Parcel Shop / Pickup Point
A designated location where customers can collect their parcel instead of home delivery.
### Postage Paid
Indicates that the shipping cost has been paid by the sender.
### Proof of Delivery (POD)
Documentation or digital confirmation that a parcel has been successfully delivered.
## R
### Recipient
The person or company receiving the shipment.
### Return Label
A pre-paid label that customers use to send goods back to the sender.
## S
### Sender
The webshop or business shipping the goods.
### Service Level
The type of delivery selected (e.g. standard, express, same-day).
### Shipping Method
The carrier and service used for transporting a parcel.
### Surcharges
Extra fees added by carriers for specific services (e.g. remote area, oversized parcels).
## T
### Tariff Code
Another term for HS code, used to determine customs duties.
### Tax
A mandatory financial charge imposed by governments on goods, services, or transactions. In international shipping, common types of taxes include [Value-Added Tax (VAT)](#vat-value-added-tax), [customs duty](#customs-duty), and excise duties on specific products like alcohol or tobacco.
### Tracking Number (Track & Trace)
A unique ID that lets the sender and recipient monitor the shipment's journey.
### Transit Time
The duration between shipment and delivery.
## V
### VAT (Value-Added Tax)
A consumption tax applied in many countries, especially within the EU, often relevant when shipping internationally.
## W
### Waybill
A transport document issued by a carrier containing shipment details, used for tracking and accountability.
# Troubleshooting
Source: https://docs.smartsend.io/troubleshooting/overview
Find answers, solve issues, and get help with Smart Send
Need help? You are in the right place. Choose the option that best fits your situation.
Getting an error? See our error codes, their meaning, and how to solve the issue.
Need a guide? See our documentation on billing, Shopify, WooCommerce, and much more.
Need to talk to a human? We are here for you via email and phone.
# Print quality issues
Source: https://docs.smartsend.io/troubleshooting/print-quality
Fix faded, streaked, or unscannable shipping labels from your label printer
If your labels print faded, streaked, or too dark to scan, work through the steps below in order. They run from the cheapest fix to the most expensive, and the first one solves most cases.
Before you start, print the same label from a second roll if you have one. If both rolls print equally badly, the problem is the printer rather than the label stock.
A barcode that scans on your own scanner can still fail on the carrier's equipment. Do not ship a label you are unsure about — reprint it. See [quality validation](/knowledge/general/labels#quality-validation) for what to check.
## Fixing print quality
Adhesive residue and paper dust build up on the printhead and the rubber platen roller. This is the most common cause of poor print by a wide margin, and it shows as faded patches, streaks, or blank vertical lines.
Clean both using the method your printer manufacturer specifies, then print a test label. On the ZD421 and ZD621, follow Zebra's cleaning procedure . Let the printhead dry fully before closing the printer.
Clean every time you change the label roll, and the problem largely stops coming back.
Calibration teaches the printer the length and gap of the labels it is loaded with. If the printer is misreading where each label starts and ends — skipping labels, printing across the gap, or feeding blank labels — calibrate it.
Run it whenever you change label size or stock, and after switching to a roll from a different supplier even when the stated size is the same. On the ZD421 and ZD621, this is SmartCal media calibration . For the exact button sequences on the GK420d, ZD420d, and ZD421d, see [Zebra printer setup](/fundamentals/print-setup/zebra-printer-setup).
If the whole label is uniformly too light, or dark and smeared, the settings are wrong for your label stock rather than the hardware being faulty.
Use the **lowest darkness setting that still gives good print quality**. Setting darkness too high makes the image print unclearly, stops barcodes scanning, and wears the printhead prematurely. A higher print speed generally needs more darkness to compensate, so change one at a time and print a test label after each change.
See Zebra's guidance on adjusting the print quality and on the darkness setting . On a Zebra printer, use the [Print Quality Assistant](#finding-the-right-settings-on-a-zebra-printer) below instead of guessing one setting at a time.
If the same vertical line is blank on every label after cleaning, and no darkness setting fixes it, individual heating elements have failed. The printhead is a consumable, not a fault — replace it.
Print volume, darkness settings, and label abrasiveness all affect how long a printhead lasts, so there is no fixed replacement interval. On the ZD421 and ZD621, see Zebra's instructions for replacing the printhead .
## Finding the right settings on a Zebra printer
Finding the right darkness and speed by trial and error is slow. For Zebra printers, the free **Zebra Nucleus Connector** app does it systematically. Its **Print Quality Assistant** prints a batch of test labels — you choose 4, 9, 16, or 25 — across different speed and darkness combinations, you pick the one that looks best, and the app applies those values to the printer.
Nucleus Connector replaces the older Zebra Printer Setup Utility and is available for three platforms:
Google Play
App Store
Zebra downloads
The Windows version also bundles the printer drivers, so it is the one to install when setting the printer up on a computer for the first time.
Before you start:
* The printer must be reachable from the device running the app over USB, Bluetooth, or your network.
* Load the label stock you actually ship on. The optimal settings are specific to the printer *and* the media, so calibrating on the wrong roll gives you the wrong answer. Run the assistant again whenever you change stock.
* Save the resulting darkness and speed values to the printer so they survive a power cycle. The assistant applies your selection when you confirm it, and can also save the settings to a file.
For the full procedure, see Zebra's documentation on working with the Print Quality Assistant , part of the Nucleus Connector user guide .
This app is Zebra-specific. If you use another brand, look for the equivalent configuration utility from your printer manufacturer — most offer one.
## Still not printing correctly
If the print is clean but the label itself is wrong — wrong size, cut off, or scaled — the problem is the print setup rather than print quality. See [Print setup](/fundamentals/print-setup) and print one of the [test labels](/fundamentals/print-setup#test-labels) to isolate whether the printer or the label data is at fault.
What quality grade shipping labels need, and how to judge whether a printed barcode is good enough.
Still stuck? We are here for you via email and phone.
# Contact support
Source: https://docs.smartsend.io/troubleshooting/support
Get in touch with the Smart Send support team via email or phone
We strive to provide the best support possible. If you have any questions or need help with anything, please contact us.
## Email
Often it is easier to explain your problem by email. Please send an email with as much detail as possible and we will try to answer as soon as we can.
Send us an email and relevant information like screenshots are always welcome [support@smartsend.io](mailto:support@smartsend.io)
## Phone
We provide support in English and Danish by phone within normal business hours.
Our opening hours are kept up-to-date at Google and in the footer of our website.
We speak English and Danish, so feel free to call us at [+45 3027 4735](tel:+4530274735)
## What to include when contacting support
When you reach out to us, providing as much context as possible helps us understand your issue and resolve it quickly. The more details you share, the faster we can help you get back on track.
Below are some helpful types of information you can include when contacting support:
### Error codes
Error codes appear when something goes wrong, but our system was able to handle it properly. These codes help us identify exactly what happened and provide you with the right solution.
If you see an error code, please include it in your support request. You can find more information about common error codes on our [Error codes](/troubleshooting/errors) page.
### Trace IDs
Trace IDs are unique identifiers that appear when something unexpected happens. These IDs help our team investigate the issue in depth and identify the root cause.
If you see a trace ID in an error message, please include it when contacting support.
### Screenshots
Screenshots are incredibly helpful for showing us exactly what you're seeing.
You can take a screenshot directly from the Smart Send platform using the screenshot button in the footer of the left side menu. This captures the current page and downloads it to your device - remember to attach it to your email when contacting our support.
If you need to take a screenshot of any application on your device, here's how:
**Capture entire screen:**
* Press `⌘ (Cmd)` + `⇧ (Shift)` + `3`
**Capture selected area:**
* Press `⌘ (Cmd)` + `⇧ (Shift)` + `4`
* Click and drag to select the area you want to capture
Screenshots are automatically saved to your desktop.
**Capture entire screen:**
* Press `⊞ (Windows)` + `PrtSc`
**Capture active window:**
* Press `Alt` + `PrtSc`
**Use Snipping Tool:**
* Press `⊞ (Windows)` + `⇧ (Shift)` + `S`
* Click and drag to select the area you want to capture
Screenshots are copied to your clipboard or saved to your Pictures folder.
### Screen recordings
Sometimes a screen recording can show us the full context of an issue better than screenshots alone. We recommend using [Google Screen Recorder](https://toolbox.googleapps.com/apps/screen_recorder/), a free tool that makes it easy to record your screen and share the video with us.
Simply visit the link, click "Start recording," and capture the issue as it happens. You can then share the recording link or download the video to send to us.
### System information
Including relevant system information helps us understand your environment and diagnose issues more effectively. Depending on the platform you're using, different system details may be helpful.
Share *The WooCommerce System Status Report* to provide us with comprehensive information about your WooCommerce installation. Learn more about understanding the WooCommerce system status report .
Go to: *WooCommerce* > *Status*.
Select *Get System Report* and then click *Download* which should download the report.
Attach the downloaded report in conversations with our support.