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
- Complete the Getting Started guide and ensure you have a valid
X-API-KEY. - 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.
| Value | Meaning |
|---|---|
limited_quantity | Goods shipped under ADR 3.4, limited quantity. Available to every team. |
adr | Fully 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:
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:
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:
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_typeon 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.