The first page of the document DocMake makes from the sample values on this page.
Logistics
Waybill
A waybill receipts the goods and evidences the contract of carriage, and it is deliberately not a document of title. The carrier hands the consignment to the consignee named on the face of it once that party identifies itself, with no original paper to surrender first, which is what makes a waybill the quicker choice on short routes and between parties who already trust each other.
The spine is the same whichever mode is used. A unique waybill number, shipper and named consignee with their contacts, origin and destination with whatever routing sits between them, the carrier and any handling agent, then the pieces with their packaging, contents, quantity, actual and chargeable weight and dimensions. Declared value for carriage, declared value for customs, the charge basis and who settles it sit together in the charges block, and handling or delivery instructions close the page.
Since the consignee never has to present an original, the waybill is often the only copy travelling with the freight, so readability is the whole job. Render one per consignment from the shipment record, keep the reference number where a scanner or a tired dispatcher can find it, and hold a separate variant per mode rather than forcing road, sea and air into a single layout.
Blanks to fill
| waybill_number | Waybill number |
| issue_date | Date of issue |
| mode_of_transport | Mode of transport |
| shipper_name | Shipper |
| shipper_address | Shipper address |
| shipper_contact | Shipper contact |
| consignee_name | Consignee |
| consignee_address | Consignee address |
| consignee_contact | Consignee contact |
| origin | Origin |
| destination | Destination |
| routing | Routing |
| carrier_name | Carrier |
| agent_name | Issuing agent |
| service_level | Service level |
| total_pieces | Total pieces |
| total_gross_weight | Total actual weight |
| total_charged_weight | Total charged weight |
| declared_value_for_carriage | Declared value for carriage |
| declared_value_for_customs | Declared value for customs |
| charges_paid_by | Charges paid by |
| handling_instructions | Handling instructions |
| delivery_instructions | Delivery instructions |
| issued_by | Issued by |
| pieces[] | 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.
{
"waybill_number": "NWI-WB-2026-00913",
"issue_date": "August 25, 2026",
"mode_of_transport": "Air freight",
"shipper_name": "Northwind Instruments SRL",
"shipper_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
"shipper_contact": "Ioana Preda, +40 264 555 118",
"consignee_name": "Kestrel Analytics Inc.",
"consignee_address": "14 Industrial Way, Wilmington, MA 01887, United States",
"consignee_contact": "Import desk, +1 781 555 0142",
"origin": "Cluj-Napoca (CLJ)",
"destination": "Boston Logan (BOS)",
"routing": "CLJ to FRA with the carrier partner, FRA to BOS direct",
"carrier_name": "Carpathian Air Cargo",
"agent_name": "Danube Freight Services, Cluj-Napoca",
"service_level": "Standard, 3 to 4 days airport to airport",
"pieces": [
{
"reference": "NWI-WB-913-1",
"packaging": "Double wall carton",
"contents": "Benchtop conductivity meters, model NC-220",
"quantity": "6",
"actual_weight": "15.6 kg",
"dimensions": "60 x 40 x 38 cm",
"charged_weight": "18.2 kg"
},
{
"reference": "NWI-WB-913-2",
"packaging": "Single wall carton",
"contents": "Spare electrode assemblies",
"quantity": "18",
"actual_weight": "8.4 kg",
"dimensions": "50 x 35 x 25 cm",
"charged_weight": "8.4 kg"
},
{
"reference": "NWI-WB-913-3",
"packaging": "Document wallet",
"contents": "Calibration certificates and manuals",
"quantity": "1",
"actual_weight": "0.6 kg",
"dimensions": "35 x 25 x 4 cm",
"charged_weight": "0.6 kg"
}
],
"total_pieces": "3",
"total_gross_weight": "24.6 kg",
"declared_value_for_carriage": "No value declared",
"declared_value_for_customs": "EUR 4,180.00",
"charges_paid_by": "Shipper, prepaid on account CAC-88214",
"handling_instructions": "Keep dry. Do not stack more than two cartons high. The instruments contain no lithium cells.",
"delivery_instructions": "Deliver to goods inwards between 08:00 and 15:00 on weekdays. Call the import desk thirty minutes ahead.",
"issued_by": "Danube Freight Services, agent for the carrier",
"total_charged_weight": "27.2 kg"
} 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 waybill.pdf \
--data-binary @- <<'JSON'
{
"template_id": "tmpl_your_template_id",
"format": "pdf",
"data": {
"waybill_number": "NWI-WB-2026-00913",
"issue_date": "August 25, 2026",
"mode_of_transport": "Air freight",
"shipper_name": "Northwind Instruments SRL",
"shipper_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
"shipper_contact": "Ioana Preda, +40 264 555 118",
"consignee_name": "Kestrel Analytics Inc.",
"consignee_address": "14 Industrial Way, Wilmington, MA 01887, United States",
"consignee_contact": "Import desk, +1 781 555 0142",
"origin": "Cluj-Napoca (CLJ)",
"destination": "Boston Logan (BOS)",
"routing": "CLJ to FRA with the carrier partner, FRA to BOS direct",
"carrier_name": "Carpathian Air Cargo",
"agent_name": "Danube Freight Services, Cluj-Napoca",
"service_level": "Standard, 3 to 4 days airport to airport",
"pieces": [
{
"reference": "NWI-WB-913-1",
"packaging": "Double wall carton",
"contents": "Benchtop conductivity meters, model NC-220",
"quantity": "6",
"actual_weight": "15.6 kg",
"dimensions": "60 x 40 x 38 cm",
"charged_weight": "18.2 kg"
},
{
"reference": "NWI-WB-913-2",
"packaging": "Single wall carton",
"contents": "Spare electrode assemblies",
"quantity": "18",
"actual_weight": "8.4 kg",
"dimensions": "50 x 35 x 25 cm",
"charged_weight": "8.4 kg"
},
{
"reference": "NWI-WB-913-3",
"packaging": "Document wallet",
"contents": "Calibration certificates and manuals",
"quantity": "1",
"actual_weight": "0.6 kg",
"dimensions": "35 x 25 x 4 cm",
"charged_weight": "0.6 kg"
}
],
"total_pieces": "3",
"total_gross_weight": "24.6 kg",
"declared_value_for_carriage": "No value declared",
"declared_value_for_customs": "EUR 4,180.00",
"charges_paid_by": "Shipper, prepaid on account CAC-88214",
"handling_instructions": "Keep dry. Do not stack more than two cartons high. The instruments contain no lithium cells.",
"delivery_instructions": "Deliver to goods inwards between 08:00 and 15:00 on weekdays. Call the import desk thirty minutes ahead.",
"issued_by": "Danube Freight Services, agent for the carrier",
"total_charged_weight": "27.2 kg"
}
}
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 Waybill template with waybill number "NWI-WB-2026-00913" and date of issue "August 25, 2026".
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 →CMR Consignment Note
The road haulage note used between countries, with the goods, the instructions, and a box each for sender, carrier and consignee.
View template →