Migrating to parties
This guide explains how to migrate from the deprecated address objects(sender
, receiver
etc.) to the new party objects.
If you want a general introduction to parties please refer to this guide.
All new features will be only added to parties going forward (i.e. freight payer).
Note: Fields with null
values, are not required to be provided, but are included to show the full format of the object.
Sender
sender
is now the sender party (type = "sender"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
zipcode
->postal_code
mobile
->phone
telephone
->phone
Before
{
"sender": {
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"zipcode": "5220",
"city": "Odense SØ",
"country_code": "DK",
"email": "info@minvirksomhed.dk",
"mobile": "70400407",
"telephone": "70400407"
}
}
After
{
"parties": [
{
"type": "sender",
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"postal_code": "5220",
"city": "Odense SØ",
"state": null,
"country_code": "DK",
"email": "info@minvirksomhed.dk",
"phone": "70400407"
}
]
}
VAT ID (VOEC, GB EORI, IOSS)
Previously VOEC, GB EORI and IOSS numbers where all provided via the "vat_id" field. They are now separated into separate attributes in the attributes
array.
The following is an example for VOEC but the same can be done for GB EORI and IOSS using service code GB_EORI
/IOSS
and attribute name gb_eori
/ioss
.
Before
{
"service_codes": "VOEC",
"sender": {
"vat_id": "1234567"
}
}
After
{
"service_codes": "VOEC",
"parties": [
{
"type": "sender",
"attributes": [
{
"name": "voec",
"value": "1234567"
}
]
}
]
}
Receiver
receiver
is now the receiver party (type = "receiver"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
zipcode
->postal_code
mobile
->phone
telephone
->phone
Before
{
"receiver": {
"name": "Lene Hansen",
"attention": null,
"address1": "Skibhusvej 52",
"address2": null,
"zipcode": "5000",
"city": "Odense C",
"country_code": "DK",
"email": "lene@email.dk",
"mobile": "12345678",
"telephone": "12345678"
}
}
After
{
"parties": [
{
"type": "receiver",
"name": "Lene Hansen",
"attention": null,
"address1": "Skibhusvej 52",
"address2": null,
"postal_code": "5000",
"city": "Odense C",
"state": null,
"country_code": "DK",
"email": "lene@email.dk",
"phone": "12345678"
}
]
}
VAT ID, member ID and access code
These 3 field are been moved into the attributes
array for the receiver party. Noteably some of the names have changed:
vat_id
->vat_no
member_id
->dhl_post_number
Before
{
"receiver": {
"vat_id": "DK12345678",
"member_id": "1234567890",
"access_code": "1234"
}
}
After
{
"parties": [
{
"type": "receiver",
"attributes": [
{
"name": "vat_no",
"value": "DK12345678"
},
{
"name": "dhl_post_number",
"value": "1234567890"
},
{
"name": "access_code",
"value": "1234"
}
]
}
]
}
Delivery date, times and instruction
Delivery date, times and instruction have all been moved to a new object in the root of the request called delivery_details
. Noteably some of the fields have changed:
from_time
->from
to_time
->to
Before
{
"receiver": {
"date": "2025-10-01",
"from_time": "08:00:00",
"to_time": "10:00:00",
"instruction": "Place in garage"
}
}
After
{
"delivery_details": {
"date": "2025-10-01",
"from": "08:00:00",
"to": "10:00:00",
"instruction": "Place in garage"
}
}
Pickup
pick_up
is now the pickup party (type = "pickup"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
zipcode
->postal_code
telephone
->phone
Before
{
"pick_up": {
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"zipcode": "5220",
"city": "Odense SØ",
"country_code": "DK",
"telephone": "70400407"
}
}
After
{
"parties": [
{
"type": "pickup",
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"postal_code": "5220",
"city": "Odense SØ",
"state": null,
"country_code": "DK",
"email": null,
"phone": "70400407"
}
]
}
Pickup date, times and instruction
Pickup date, times and instruction have all been moved to a new object in the root of the request called pickup_details
. Noteably some of the fields have changed:
from_time
->from
to_time
->to
Before
{
"pick_up": {
"date": "2025-10-01",
"from_time": "08:00:00",
"to_time": "10:00:00",
"instruction": "Pickup at gate 17"
}
}
After
{
"pickup_details": {
"date": "2025-10-01",
"from": "08:00:00",
"to": "10:00:00",
"instruction": "Pickup at gate 17"
}
}
Bill to
bill_to
is now the importer party (type = "importer"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
zipcode
->postal_code
mobile
->phone
telephone
->phone
Before
{
"bill_to": {
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"zipcode": "5220",
"city": "Odense SØ",
"country_code": "DK",
"email": "info@minvirksomhed.dk",
"mobile": "70400407",
"telephone": "70400407"
}
}
After
{
"parties": [
{
"type": "importer",
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"postal_code": "5220",
"city": "Odense SØ",
"state": null,
"country_code": "DK",
"email": "info@minvirksomhed.dk",
"phone": "70400407"
}
]
}
VAT ID and customer number
These 2 field are been moved into the attributes
array for the importer party. Noteably some of the names have changed:
vat_id
->vat_no
Before
{
"bill_to": {
"vat_id": "DK12345678",
"customer_number": "1234567890",
}
}
After
{
"parties": [
{
"type": "importer",
"attributes": [
{
"name": "vat_no",
"value": "DK12345678"
},
{
"name": "customer_number",
"value": "1234567890"
}
]
}
]
}
Service point
service_point
is now the service point party (type = "service_point"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
id
->service_point_id
zipcode
->postal_code
Before
{
"service_point": {
"id": "5280",
"name": "Pakkeshop Dagli Brugsen",
"address": "Virketoften 1",
"address2": null,
"zipcode": "5220",
"city": "ODENSE SØ",
"country_code": "DK"
}
}
After
{
"parties": [
{
"type": "service_point",
"name": "Pakkeshop Dagli Brugsen",
"attention": null,
"address": "Virketoften 1",
"address2": null,
"zipcode": "5220",
"city": "ODENSE SØ",
"state": null,
"country_code": "DK",
"email": null,
"phone": null,
"attributes": [
{
"name": "service_point_id",
"value": "5280"
}
]
}
]
}
Service point ID only
When providing the selected service point, it might seem like a lot to provide a service point party just to add an attribute for the service point ID. So instead a new field in the root of the request has been added; service_point_id
.
Before
{
"service_point": {
"id": "5280"
}
}
After
{
"service_point_id": "5280"
}
Return to
return_to
is now the return party (type = "return"
). For name and address information the migration is pretty much 1:1. Noteably some of the fields have changed:
zipcode
->postal_code
telephone
->phone
Before
{
"return_to": {
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"zipcode": "5220",
"city": "Odense SØ",
"country_code": "DK",
"telephone": "70400407"
}
}
After
{
"parties": [
{
"type": "return",
"name": "Min Virksomhed ApS",
"attention": "Lene Hansen",
"address1": "Hvilehøjvej 25",
"address2": null,
"postal_code": "5220",
"city": "Odense SØ",
"state": null,
"country_code": "DK",
"email": null,
"phone": "70400407"
}
]
}