SendifyAPI docs
Open Sendify

Shipping guides · 3 min read

How to Ship Dangerous Goods

Classify packages as dangerous goods and book them with carriers that take them.

This guide will show you how to create and book shipments that contain dangerous goods.

Prerequisites

  1. Complete the Getting Started guide and ensure you have a valid X-API-KEY.
  2. If you want to ship fully regulated dangerous goods (ADR), you need specific approval from Sendify. Contact us to get approved. You do not need to do this if you're only shipping limited quantity dangerous goods.

1. Determine which dangerous goods type to use

There are two types of dangerous goods: Limited Quantity, and ADR.

ValueMeaning
limited_quantityGoods shipped under ADR 3.4, limited quantity. Available to every team.
adrFully regulated dangerous goods. Requires ADR approval for your team.

If any package is adr, a shipment is considered fully regulated, even when other packages are limited_quantity or regular goods.

By classifying a package, you confirm that you understand the rules for that kind of dangerous goods and that the shipment meets the requirements.

2. Create a shipment with dangerous goods

Dangerous goods is specified on a package level by setting the dangerous_goods_type to either limited_quantity or adr (omit the property altogether for regular goods). You can use this when calling POST /shipments and PUT /shipments/{id}, and it is returned when fetching a shipment through GET /shipments/{id}.

Example: POST /shipments with one limited quantity package:

bash
curl --location 'https://app.dev.sendify.se/external/v1/shipments' \
--header 'x-api-key: $YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "enable_bookable_validation": true,
    "from": {
        "name": "Sendify AB",
        "address": {
            "address_line_1": "Östra Larmgatan 16",
            "country_code": "SE",
            "postal_code": "41107",
            "city": "Göteborg"
        },
        "contact": {
            "name": "Support Agent",
            "phone": "0103303091",
            "email": "contact@sendify.se"
        }
    },
    "to": {
        "name": "Sendify GmbH",
        "address": {
            "address_line_1": "Pontus Wiknersgatan 1",
            "country_code": "SE",
            "postal_code": "41132",
            "city": "Göteborg"
        },
        "contact": {
            "name": "Holger",
            "phone": "0707112233",
            "email": "holger@sendify.se"
        },
        "is_private_individual": false
    },
    "reference_id": "Paint order 1234",
    "packages": [
        {
            "depth_cm": 40,
            "height_cm": 30,
            "width_cm": 40,
            "weight_kg": 12,
            "quantity": 1,
            "description": "Aerosol paint cans",
            "type": "PACKAGE",
            "stackable": true,
            "dangerous_goods_type": "limited_quantity"
        },
        {
            "depth_cm": 20,
            "height_cm": 20,
            "width_cm": 20,
            "weight_kg": 2,
            "quantity": 1,
            "description": "Brushes",
            "type": "PACKAGE",
            "stackable": true
        }
    ]
}'

3. Fetch rates

Request rates as usual by calling POST /shipments/rates. The search will automatically apply the required addons for the dangerous goods, and filter out products that do not support sending dangerous goods.

Example query:

bash
curl --location 'https://app.dev.sendify.se/external/v1/shipments/rates' \
--header 'x-api-key: $YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "shipment_id": "YOUR_SHIPMENT_ID",
    "requested_pickup_time": "2026-10-01T10:00:00+02:00"
}'

If you attempt to fetch rates for an ADR shipment while not approved for sending ADR, this call will return HTTP 422.

Some carriers require an ADR certificate for fully regulated shipments - if this is the case, the required_documents array on each result includes adr_dangerousgoods.

Some specific products also require an ADR declaration form. This is not yet supported in the API and these products will be filtered out.

4. Upload ADR certificate

If the product you want to book requires an ADR certificate, upload the PDF as multipart form data to POST /shipments/{id}/adr_dangerousgoods before booking:

bash
curl --location 'https://app.dev.sendify.se/external/v1/shipments/$SHIPMENT_ID/adr_dangerousgoods' \
--header 'x-api-key: $YOUR_API_KEY' \
--form 'file=@"/path/to/adr-certificate.pdf"'

Note that this is not needed for all carriers - check the required_documents array on the product and only upload the certificate if the array includes adr_dangerousgoods.

5. Book and follow up

Book as usual as explained in the Getting Started guide.

The booking is refused with HTTP 422 in two cases:

  • dangerous_goods_type on a package changed after the rates were fetched. Solution: fetch new rates, and then book with a new booking token.
  • Your team's ADR approval has been withdrawn since the rates were fetched.

Need help? Contact api@sendify.com and include the X-Sendify-Request-ID header from the relevant request if available.