curl --request PUT \
--url https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": null
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
}
}
'import requests
url = "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}"
payload = {
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": None
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Standard domestic parcel',
description: 'Default service and packaging for a small parcel.',
shipment: {
currency: 'DKK',
weight_unit: 'g',
dimension_unit: 'cm',
delivery: {service_code: 'postnord_agent', pickup_point: null},
parcels: [{gross_weight: 1000, length: 30, width: 20, height: 15}]
}
})
};
fetch('https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Standard domestic parcel',
'description' => 'Default service and packaging for a small parcel.',
'shipment' => [
'currency' => 'DKK',
'weight_unit' => 'g',
'dimension_unit' => 'cm',
'delivery' => [
'service_code' => 'postnord_agent',
'pickup_point' => null
],
'parcels' => [
[
'gross_weight' => 1000,
'length' => 30,
'width' => 20,
'height' => 15
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}"
payload := strings.NewReader("{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": null
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
},
"created_at": "2026-09-18T14:00:00Z",
"updated_at": "2026-09-18T14:00:00Z"
}
}{
"message": "Unauthenticated."
}{
"message": "This action is unauthorized."
}{
"message": "The requested resource was not found."
}{
"message": "The given data was invalid.",
"errors": {
"field_name": [
"This field is required."
]
}
}{
"message": "Too Many Attempts."
}{
"message": "Server Error"
}{
"message": "Service Unavailable"
}Update a shipment template
Update an existing template with partial shipment input in shipment. This does not change or book any shipments previously created using the template. The response wraps the template resource in data.
curl --request PUT \
--url https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": null
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
}
}
'import requests
url = "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}"
payload = {
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": None
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Standard domestic parcel',
description: 'Default service and packaging for a small parcel.',
shipment: {
currency: 'DKK',
weight_unit: 'g',
dimension_unit: 'cm',
delivery: {service_code: 'postnord_agent', pickup_point: null},
parcels: [{gross_weight: 1000, length: 30, width: 20, height: 15}]
}
})
};
fetch('https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Standard domestic parcel',
'description' => 'Default service and packaging for a small parcel.',
'shipment' => [
'currency' => 'DKK',
'weight_unit' => 'g',
'dimension_unit' => 'cm',
'delivery' => [
'service_code' => 'postnord_agent',
'pickup_point' => null
],
'parcels' => [
[
'gross_weight' => 1000,
'length' => 30,
'width' => 20,
'height' => 15
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}"
payload := strings.NewReader("{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartsend.io/v2/teams/{teamUuid}/shipment-templates/{shipmentTemplateUuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Standard domestic parcel\",\n \"description\": \"Default service and packaging for a small parcel.\",\n \"shipment\": {\n \"currency\": \"DKK\",\n \"weight_unit\": \"g\",\n \"dimension_unit\": \"cm\",\n \"delivery\": {\n \"service_code\": \"postnord_agent\",\n \"pickup_point\": null\n },\n \"parcels\": [\n {\n \"gross_weight\": 1000,\n \"length\": 30,\n \"width\": 20,\n \"height\": 15\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"title": "Standard domestic parcel",
"description": "Default service and packaging for a small parcel.",
"shipment": {
"currency": "DKK",
"weight_unit": "g",
"dimension_unit": "cm",
"delivery": {
"service_code": "postnord_agent",
"pickup_point": null
},
"parcels": [
{
"gross_weight": 1000,
"length": 30,
"width": 20,
"height": 15
}
]
},
"created_at": "2026-09-18T14:00:00Z",
"updated_at": "2026-09-18T14:00:00Z"
}
}{
"message": "Unauthenticated."
}{
"message": "This action is unauthorized."
}{
"message": "The requested resource was not found."
}{
"message": "The given data was invalid.",
"errors": {
"field_name": [
"This field is required."
]
}
}{
"message": "Too Many Attempts."
}{
"message": "Server Error"
}{
"message": "Service Unavailable"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Preferred language(s) for translatable content using BCP 47 language tags. Supports quality values (q-factors) for priority ordering. The API negotiates the best available language based on this header, the team's configured language, and available translations. If omitted, the team's default language is used.
"da-DK, da;q=0.9, en;q=0.8"
Optional client-supplied request identifier. When provided and matching the validation pattern, the value is echoed back in the Request-ID response header. Otherwise the server generates one. Use this to correlate requests between client and server when reporting issues.
1 - 64^[A-Za-z0-9._-]{1,64}$Path Parameters
Team uuid. All resources are scoped to this team.
UUID of the shipment template
Body
Create or update a template using title, an optional description and partial shipment input. Request bodies have no outer data wrapper.
Human-readable name for the template.
255Partial booking input to prefill a shipment. This is a reusable set of input fields, not a created shipment resource; it has no shipment UUID or booking state.
Show child attributes
Show child attributes
Optional description of what the template is used for.
Response
Shipment template updated successfully
A saved template with its own identity, display metadata and partial shipment input. Successful responses wrap this template in data; its reusable booking fields are in shipment.
Show child attributes
Show child attributes
Was this page helpful?