Skip to main content

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"
}
]
}