Skip to main content

Connecting custom carrier API

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

{
    "order_id": 774,
  	"seller_id": 1223, // Or center_id when the center makes the request
    "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",
    "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.00,
        "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: callback_response.json

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