DocMake
The PDF DocMake makes from the Waybill template

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.

  1. 01 Sign up free and duplicate this template into your workspace.
  2. 02 Adjust the wording and branding in the visual editor.
  3. 03 Fill it in the app, share it as a form link, or call the API.
sample-data.json
{
  "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.

make-waybill.sh
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".

How the MCP server works →

More logistics templates