The first page of the document DocMake makes from the sample values on this page.
Logistics
CMR Consignment Note
The CMR consignment note travels with goods moving by road between countries that apply the CMR Convention. It sets out the arrangement between sender, carrier and consignee, and its boxes are numbered so that a driver in one country, a dispatcher in another and a claims handler in a third all point at the same field when something goes wrong.
Responsibility splits along that numbering. The sender completes the opening boxes: sender and consignee identity, the place and date the goods were taken over, the place of delivery, the marks, number and kind of packages with a description of what they hold, gross weight, instructions for customs including the Incoterms rule, and any special handling such as an ADR class or a temperature range. The carrier adds its own identity, any successive carrier, and above all its reservations about the state of the load at collection. The last three boxes are signatures, sender, carrier and then the consignee on arrival, and an unsigned arrival box is the single most common reason a delivery cannot later be proved.
One note is read by parties who work in different languages, and DocMake can translate a template's content into eight languages, so you can keep language variants of the same note and render whichever one the receiving office reads from the same JSON. The carriage conditions themselves stay a matter for your legal team; the template handles the layout and the data, not liability.
Blanks to fill
| consignment_note_number | Consignment note number |
| established_in | Established in |
| established_on | Established on |
| sender_name | Sender |
| sender_address | Sender address |
| consignee_name | Consignee |
| consignee_address | Consignee address |
| carrier_name | Carrier |
| carrier_address | Carrier address |
| vehicle_registration | Vehicle and trailer registration |
| successive_carrier | Successive carrier |
| place_of_taking_over | Place and country of taking over the goods |
| date_of_taking_over | Date of taking over |
| place_of_delivery | Place of delivery |
| attached_documents | Documents attached |
| customs_instructions | Instructions for customs |
| special_instructions | Special agreements and handling instructions |
| charges_payable_by | Charges payable by |
| carriers_reservations | Carrier reservations and observations |
| sender_signature | Signature and stamp of the sender |
| carrier_signature | Signature and stamp of the carrier |
| consignee_signature | Signature and stamp of the consignee |
| goods_received_on | Goods received on |
| goods[] | One per item, so a row is added for every item in the list |
The data behind the preview
This is the exact JSON that produced the document above. Change the values, POST them to the API, and you get your version back as DOCX or PDF. Lists grow and shrink with your data; the layout adapts.
- 01 Sign up free and duplicate this template into your workspace.
- 02 Adjust the wording and branding in the visual editor.
- 03 Fill it in the app, share it as a form link, or call the API.
{
"consignment_note_number": "CMR-2026-004472",
"sender_name": "Northwind Instruments SRL",
"sender_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
"consignee_name": "Helvetia Labortechnik GmbH",
"consignee_address": "Ostbahnhofstrasse 22, 81667 Munich, Germany",
"place_of_delivery": "Munich, Germany",
"place_of_taking_over": "Cluj-Napoca, Romania",
"date_of_taking_over": "August 24, 2026",
"attached_documents": "Commercial invoice CI-2026-0431, packing list PL-2026-0431, delivery instruction sheet",
"goods": [
{
"marks_and_numbers": "HLT / MUNICH / 1 to 3",
"packages": "3",
"packing_method": "Export cartons on one euro pallet",
"nature_of_goods": "Benchtop conductivity meters, model NC-220",
"statistical_number": "9027.80",
"gross_weight": "78.4 kg",
"volume": "0.42 cbm"
},
{
"marks_and_numbers": "HLT / MUNICH / 4",
"packages": "1",
"packing_method": "Wooden case, foam lined",
"nature_of_goods": "Wall mounting brackets, stainless steel",
"statistical_number": "8302.50",
"gross_weight": "16.2 kg",
"volume": "0.06 cbm"
}
],
"customs_instructions": "FCA Cluj-Napoca, Incoterms 2020. Union goods in free circulation, no export declaration needed for this movement.",
"special_instructions": "Keep the pallet upright. Delivery window 08:00 to 14:00, ramp 3, booked under reference HLT-2608.",
"carrier_name": "Transilvania Cargo SRL",
"carrier_address": "Calea Baciului 201, 400230 Cluj-Napoca, Romania",
"vehicle_registration": "CJ 14 TRC, trailer CJ 88 RMK",
"successive_carrier": "Bayern Nahverkehr GmbH for the final leg from Passau",
"carriers_reservations": "One carton scuffed on the top corner at collection. Contents checked by the sender and found intact.",
"charges_payable_by": "Sender, invoiced on account TC-4471",
"established_in": "Cluj-Napoca",
"established_on": "August 24, 2026",
"sender_signature": "Northwind Instruments SRL, Ioana Preda",
"carrier_signature": "Transilvania Cargo SRL, driver Mihai Lazar",
"consignee_signature": "Helvetia Labortechnik GmbH, goods inwards",
"goods_received_on": "August 26, 2026, 10:15"
} Generate this document via the API
One template plus changing data is the whole point. The list of blanks above is the contract, and every new set of values comes back in the same layout: fill it in the app, hand someone a form link, or POST the JSON and get the file straight back.
The request below carries this page's own values, so it runs as soon as the template exists in your workspace. Swap the values for yours and the response is your document.
curl -X POST https://app.docmake.io/api/v1/render \
-H "Authorization: Bearer $DOCMAKE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--output cmr-consignment-note.pdf \
--data-binary @- <<'JSON'
{
"template_id": "tmpl_your_template_id",
"format": "pdf",
"data": {
"consignment_note_number": "CMR-2026-004472",
"sender_name": "Northwind Instruments SRL",
"sender_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
"consignee_name": "Helvetia Labortechnik GmbH",
"consignee_address": "Ostbahnhofstrasse 22, 81667 Munich, Germany",
"place_of_delivery": "Munich, Germany",
"place_of_taking_over": "Cluj-Napoca, Romania",
"date_of_taking_over": "August 24, 2026",
"attached_documents": "Commercial invoice CI-2026-0431, packing list PL-2026-0431, delivery instruction sheet",
"goods": [
{
"marks_and_numbers": "HLT / MUNICH / 1 to 3",
"packages": "3",
"packing_method": "Export cartons on one euro pallet",
"nature_of_goods": "Benchtop conductivity meters, model NC-220",
"statistical_number": "9027.80",
"gross_weight": "78.4 kg",
"volume": "0.42 cbm"
},
{
"marks_and_numbers": "HLT / MUNICH / 4",
"packages": "1",
"packing_method": "Wooden case, foam lined",
"nature_of_goods": "Wall mounting brackets, stainless steel",
"statistical_number": "8302.50",
"gross_weight": "16.2 kg",
"volume": "0.06 cbm"
}
],
"customs_instructions": "FCA Cluj-Napoca, Incoterms 2020. Union goods in free circulation, no export declaration needed for this movement.",
"special_instructions": "Keep the pallet upright. Delivery window 08:00 to 14:00, ramp 3, booked under reference HLT-2608.",
"carrier_name": "Transilvania Cargo SRL",
"carrier_address": "Calea Baciului 201, 400230 Cluj-Napoca, Romania",
"vehicle_registration": "CJ 14 TRC, trailer CJ 88 RMK",
"successive_carrier": "Bayern Nahverkehr GmbH for the final leg from Passau",
"carriers_reservations": "One carton scuffed on the top corner at collection. Contents checked by the sender and found intact.",
"charges_payable_by": "Sender, invoiced on account TC-4471",
"established_in": "Cluj-Napoca",
"established_on": "August 24, 2026",
"sender_signature": "Northwind Instruments SRL, Ioana Preda",
"carrier_signature": "Transilvania Cargo SRL, driver Mihai Lazar",
"consignee_signature": "Helvetia Labortechnik GmbH, goods inwards",
"goods_received_on": "August 26, 2026, 10:15"
}
}
JSON tmpl_your_template_id is
a stand-in: build this template in the visual editor and copy the id it shows, or create one with POST /api/v1/templates. Keys, formats, strict mode and batches are in the API reference.
Or let an AI assistant do it
The DocMake MCP server lets Claude and other assistants make this document the same way. Install it once:
claude mcp add docmake \
--env DOCMAKE_API_KEY=dm_your_api_key \
-- npx -y @docmake/mcp@latest Then ask for the document in plain words:
Make a PDF from my CMR Consignment Note template with consignment note number "CMR-2026-004472" and established in "Cluj-Napoca".
More logistics templates
Bill of Lading
The ocean document: shipper, consignee and notify party, the containers, the freight terms and how many originals were issued.
View template →Certificate of Origin
States where the goods were made, with the packages, their tariff headings and a block for the chamber of commerce to stamp.
View template →Delivery Note
The sheet that travels with the goods: what was ordered against what arrived, and a line for anything short or damaged.
View template →