Browse all articles

Connecting Custom Carrier API

Last updated

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:

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:

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.

{  
  "order_id": 774,  
  "seller_id": 1223,  
  "center_id": 0,  
  "api_id": 456,  
  "api_description": "Bol.com - Main shop",  
  "channel_name": "Bol.com",  
  "remote_order_id": "ORD-2025-4055",  
  "order_date": "2025-05-13 08:49:28",  
  "ship_on_date": "2025-05-14",  
  "remote_carrier_id": "postnl_standard_001",  
  "carrier_code": "given carrier_code",  
  "sender_details": {  
    "name": "John Doe",  
    "company_name": "Doe Logistics BV",  
    "street": "Keizersgracht",  
    "address_line_2": "Suite 301",  
    "country": "NL",  
    "house_number": "241",  
    "zipcode": "1016 EA",  
    "city": "Amsterdam",  
    "state_province_code": "",  
    "phone_number": "+31 20 123 4567",  
    "email": "[email protected]",  
    "signature_full_name": "John Doe",  
    "signature_initials": "JD",  
    "vat_number": "NL123456789B01",  
    "eori_number": "NL123456789000"  
  },  
  "shipping_address1": "Keizersgracht 123",  
  "shipping_address2": "2nd floor",  
  "shipping_address_supplement": "Entrance via side door",  
  "shipping_city": "Amsterdam",  
  "shipping_company": "KiteGear BV",  
  "shipping_country_code": "NL",  
  "shipping_email": "[email protected]",  
  "shipping_first_name": "Emma",  
  "shipping_house_number": "123",  
  "shipping_house_number_ext": "B",  
  "shipping_last_name": "van Dijk",  
  "shipping_middle_name": null,  
  "shipping_region": "Noord-Holland",  
  "shipping_street": "Keizersgracht",  
  "shipping_zip_code": "1015 CJ",  
  "shipping_address_accurate": 1,  
  "shipping_phone_number": "+31 6 12345678",  
  "shipping_service": "",  
  "billing_address1": "Keizersgracht 123",  
  "billing_address2": "2nd floor",  
  "billing_address_supplement": "Finance dept.",  
  "billing_city": "Amsterdam",  
  "billing_company": "KiteGear BV",  
  "billing_country_code": "NL",  
  "billing_email": "[email protected]",  
  "billing_first_name": "Emma",  
  "billing_house_number": "123",  
  "billing_house_number_ext": "B",  
  "billing_last_name": "van Dijk",  
  "billing_middle_name": null,  
  "billing_region": "Noord-Holland",  
  "billing_street": "Keizersgracht",  
  "billing_zip_code": "1015 CJ",  
  "billing_address_accurate": 1,  
  "billing_phone_number": "+31 20 1234567",  
  "total_weight": 8.0,  
  "total_length": 80,  
  "total_width": 25,  
  "total_height": 25,  
  "total_order_price": 749.95,  
  "total_order_currency": "EUR",  
  "order_products": [  
    {  
      "order_product_id": 868,  
      "order_product_price": 699.95,  
      "order_product_price_currency": "EUR",  
      "ean": "8719326583655",  
      "sku": null,  
      "quantity": 1,  
      "product_title": "North Orbit Kite 2025 - 12m",  
      "product_weight": "5.00",  
      "product_length": 80,  
      "product_width": 25,  
      "product_height": 15,  
      "product_hs_code": "95062900",  
      "remote_order_product_id": "NL-PROD-001",  
      "product_origin_country_code": "NL"  
    },  
    {  
      "order_product_id": 869,  
      "order_product_price": 50.0,  
      "order_product_price_currency": "EUR",  
      "ean": "8719326583617",  
      "sku": "TSHIRT-BLACK-M",  
      "quantity": 1,  
      "product_title": "Mystic Kite Pump Pro",  
      "product_weight": "3.00",  
      "product_length": 40,  
      "product_width": 10,  
      "product_height": 10,  
      "product_hs_code": "84142080",  
      "remote_order_product_id": "NL-PROD-002",  
      "product_origin_country_code": "DE"  
    }  
  ]  
}

Upon receiving this data, you are expected to generate a shipping label PDF, encode it in Base64, and return the following response:

{  
    "label_id": 99999, // Your internal label id  
    "carrier_code": "DHL",  
    "tracking_number": "DHL87623654234",   
    "tracking_number_url": "https://dhl.com/tracking?DHL87623654234",  
    "pdf_content_base64": "JVBERi0xLjQKJeLjzgo8PC9UeXBlL0NhdGFsb2cvUG..."  
}
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

{  
  "error": {  
    "message": "Human readable error explanation here"  
  }  
}

Was this helpful?

Related articles