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_codemobile->phonetelephone->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_codemobile->phonetelephone->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_nomember_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->fromto_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_codetelephone->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->fromto_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_codemobile->phonetelephone->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_idzipcode->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_codetelephone->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"
}
]
}