ChannelDock offers a wide range of pre-built carrier integrations that sellers and fulfillment centers can use out of the box. However, since it’s not feasible for us to build a connection with every carrier platform, we’ve developed a set of APIs that allow you, as a carrier, to create shipment methods in ChannelDock for a specific seller or fulfillment center.
This guide outlines the steps you need to follow to complete this integration.
Step 1:
Generate API credentials:
- Seller: https://channeldock.com/portal/public/settings/api_keys
- Fulfillment center: https://channeldock.com/portal/public/centersettings/api_keys
Step 2:
The next step is adding the shipping methods you provide as a carrier in ChannelDock. You can find more info about the endpoint and JSON structure we expect here:
- Seller: Postman docs
- Fulfillment center: Postman docs
Step 3:
Whenever a ChannelDock user attempts to create a shipping label using your shipment methods, we will send you a JSON object containing the order data and details about the selected shipment method. For an example, see this file: callback_data.json
1
{2
"order_id": 774,
3
"seller_id": 1223, // The label is requested by the Seller when center_id is 0
4
"center_id": 0, // The label is requested by the Center when center_id is not 0
5
"remote_order_id": "ORD-2025-4055",
6
"order_date": "2025-05-13 08:49:28",
7
"ship_on_date": "2025-05-14",
8
"remote_carrier_id": "postnl_standard_001",
9
"carrier_code": "given carrier_code", // Value is in lowercase
10
"sender_details": {11
"name": "John Doe",
12
"company_name": "Doe Logistics BV",
13
"street": "Keizersgracht",
14
"address_line_2": "Suite 301",
15
"country": "NL",
16
"house_number": "241",
17
"zipcode": "1016 EA",
18
"city": "Amsterdam",
19
"state_province_code": "",
20
"phone_number": "+31 20 123 4567",
21
"email": "[email protected]",
22
"signature_full_name": "John Doe",
23
"signature_initials": "JD",
24
"vat_number": "NL123456789B01",
25
"eori_number": "NL123456789000"
26
}
27
"shipping_address1": "Keizersgracht 123",
28
"shipping_address2": "2nd floor",
29
"shipping_address_supplement": "Entrance via side door",
30
"shipping_city": "Amsterdam",
31
"shipping_company": "KiteGear BV",
32
"shipping_country_code": "NL",
33
"shipping_email": "[email protected]",
34
"shipping_first_name": "Emma",
35
"shipping_house_number": "123",
36
"shipping_house_number_ext": "B",
37
"shipping_last_name": "van Dijk",
38
"shipping_middle_name": null,
39
"shipping_region": "Noord-Holland",
40
"shipping_street": "Keizersgracht",
41
"shipping_zip_code": "1015 CJ",
42
"shipping_address_accurate": 1,
43
"shipping_phone_number": "+31 6 12345678",
44
"shipping_service": "", // JSON string
45
"billing_address1": "Keizersgracht 123",
46
"billing_address2": "2nd floor",
47
"billing_address_supplement": "Finance dept.",
48
"billing_city": "Amsterdam",
49
"billing_company": "KiteGear BV",
50
"billing_country_code": "NL",
51
"billing_email": "[email protected]",
52
"billing_first_name": "Emma",
53
"billing_house_number": "123",
54
"billing_house_number_ext": "B",
55
"billing_last_name": "van Dijk",
56
"billing_middle_name": null,
57
"billing_region": "Noord-Holland",
58
"billing_street": "Keizersgracht",
59
"billing_zip_code": "1015 CJ",
60
"billing_address_accurate": 1,
61
"billing_phone_number": "+31 20 1234567",
62
"total_weight": 8.0,
63
"total_length": 80,
64
"total_width": 25,
65
"total_height": 25,
66
"total_order_price": 749.95,
67
"total_order_currency": "EUR",
68
"order_products": [
69
{70
"order_product_id": 868,
71
"order_product_price": 699.95,
72
"order_product_price_currency": "EUR",
73
"ean": "8719326583655",
74
"sku": null,
75
"quantity": 1,
76
"product_title": "North Orbit Kite 2025 - 12m",
77
"product_weight": "5.00",
78
"product_length": 80,
79
"product_width": 25,
80
"product_height": 15,
81
"product_hs_code": "95062900",
82
"remote_order_product_id": "NL-PROD-001",
83
"product_origin_country_code": "NL"
84
},
85
{86
"order_product_id": 869,
87
"order_product_price": 50.00,
88
"order_product_price_currency": "EUR",
89
"ean": "8719326583617",
90
"sku": "TSHIRT-BLACK-M",
91
"quantity": 1,
92
"product_title": "Mystic Kite Pump Pro",
93
"product_weight": "3.00",
94
"product_length": 40,
95
"product_width": 10,
96
"product_height": 10,
97
"product_hs_code": "84142080",
98
"remote_order_product_id": "NL-PROD-002",
99
"product_origin_country_code": "DE"
100
}
101
]
102
}
Upon receiving this data, you are expected to generate a shipping label PDF, encode it in Base64, and return the following response: callback_response.json
Success response - http code 200
1
{2
"label_id": 99999, // Your internal label id
3
"carrier_code": "DHL",
4
"tracking_number": "DHL87623654234",
5
"tracking_number_url": "https://dhl.com/tracking?DHL87623654234",
6
"pdf_content_base64": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUG..."
7
}
Attribute | Description |
label_id | The label ID in your system. |
carrier_code | The carrier that created this label (for example: DHL, PostNL, UPS). |
tracking_number | The tracking number from the same carrier that made the label. |
tracking_number_url | The link to track this shipment with that carrier. |
pdf_content_base64 | The label PDF file as Base64 text (A6 paper size). |
ChannelDock will then print the PDF label and sent the Tracking number to the sales channel to process the order.
Error response - http code 400 range
1
{2
"error": {3
"message": "Human readable error explanation here"
4
}
5
}
