DocMake
The PDF DocMake makes from the Export Packing List template

The first page of the document DocMake makes from the sample values on this page.

Logistics

Export Packing List

An export packing list explains how a consignment is physically packed, so a forwarder can plan space on a vessel and an inspector can reach one specific item without emptying the container. It repeats the goods description from the commercial invoice word for word and deliberately says nothing about price.

Its rows are packages rather than products. Each line carries the marks and numbers stenciled on the outer packaging, what sits inside that package with its HS heading, how many units, the net weight of the goods, the gross weight including packaging, the outer dimensions and the volume that follows from them. Groupage consignments are quoted on that cubic measurement, and a full container load repeats the container and seal number so the list ties back to the transport document. A totals block closes it with package count, both weights and total volume.

This is the document that punishes double entry. A packing station already knows every weight and dimension it just measured, so retyping them into a spreadsheet is how a list quietly stops matching its invoice. Push the carton array out of the packing system instead, compute the totals there, and render the list and its invoice from the same payload.

Blanks to fill

packing_list_number Packing list number
issue_date Date
invoice_reference Commercial invoice reference
order_reference Buyer order reference
exporter_name Exporter
exporter_address Exporter address
consignee_name Consignee
consignee_address Consignee address
port_of_loading Port of loading
port_of_discharge Port of discharge
vessel_or_flight Vessel or flight
container_number Container number
seal_number Seal number
total_packages Total packages
total_net_weight Total net weight
total_gross_weight Total gross weight
total_volume Total volume
packing_notes Packing notes
packed_by Packed by
checked_by Checked by
cartons[] 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
{
  "packing_list_number": "PL-2026-0418",
  "issue_date": "August 14, 2026",
  "exporter_name": "Northwind Instruments SRL",
  "exporter_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
  "consignee_name": "Kestrel Analytics Inc.",
  "consignee_address": "14 Industrial Way, Wilmington, MA 01887, United States",
  "invoice_reference": "CI-2026-0418",
  "order_reference": "KA-PO-77104",
  "port_of_loading": "Constanta, Romania",
  "port_of_discharge": "New York, NY, United States",
  "vessel_or_flight": "MV Danube Trader, voyage 214E",
  "container_number": "MSCU 481 2263",
  "seal_number": "RO0094771",
  "cartons": [
    {
      "marks_and_numbers": "KESTREL / 1 of 5",
      "package_type": "Double wall carton",
      "contents": "Benchtop conductivity meter NC-220",
      "tariff_heading": "9027.80",
      "units": "6",
      "net_weight": "13.2 kg",
      "gross_weight": "15.6 kg",
      "dimensions": "60 x 40 x 38 cm",
      "volume": "0.091 cbm"
    },
    {
      "marks_and_numbers": "KESTREL / 2 of 5",
      "package_type": "Double wall carton",
      "contents": "Benchtop conductivity meter NC-220",
      "tariff_heading": "9027.80",
      "units": "6",
      "net_weight": "13.2 kg",
      "gross_weight": "15.6 kg",
      "dimensions": "60 x 40 x 38 cm",
      "volume": "0.091 cbm"
    },
    {
      "marks_and_numbers": "KESTREL / 3 of 5",
      "package_type": "Single wall carton",
      "contents": "Flow through conductivity cell, four electrode",
      "tariff_heading": "9027.90",
      "units": "24",
      "net_weight": "7.2 kg",
      "gross_weight": "8.4 kg",
      "dimensions": "50 x 35 x 25 cm",
      "volume": "0.044 cbm"
    },
    {
      "marks_and_numbers": "KESTREL / 4 of 5",
      "package_type": "Single wall carton",
      "contents": "Calibration standard set, boxed bottles",
      "tariff_heading": "3822.90",
      "units": "6",
      "net_weight": "9.0 kg",
      "gross_weight": "10.2 kg",
      "dimensions": "40 x 30 x 30 cm",
      "volume": "0.036 cbm"
    },
    {
      "marks_and_numbers": "KESTREL / 5 of 5",
      "package_type": "Carton, papers and spares",
      "contents": "Power leads, manuals, spare fuses",
      "tariff_heading": "8544.42",
      "units": "1",
      "net_weight": "0.4 kg",
      "gross_weight": "2.0 kg",
      "dimensions": "40 x 30 x 20 cm",
      "volume": "0.024 cbm"
    }
  ],
  "total_packages": "5 cartons on 1 euro pallet",
  "total_net_weight": "43.0 kg",
  "total_gross_weight": "51.8 kg",
  "total_volume": "0.286 cbm",
  "packing_notes": "Meters packed upright with corner protectors. Calibration standards kept away from the pallet edge. Pallet shrink wrapped and corner strapped.",
  "packed_by": "Vlad Anton, packing station 2",
  "checked_by": "Ioana Preda, Export Manager"
}

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-export-packing-list.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 export-packing-list.pdf \
  --data-binary @- <<'JSON'
{
  "template_id": "tmpl_your_template_id",
  "format": "pdf",
  "data": {
    "packing_list_number": "PL-2026-0418",
    "issue_date": "August 14, 2026",
    "exporter_name": "Northwind Instruments SRL",
    "exporter_address": "Str. Fabricii 118, 400632 Cluj-Napoca, Romania",
    "consignee_name": "Kestrel Analytics Inc.",
    "consignee_address": "14 Industrial Way, Wilmington, MA 01887, United States",
    "invoice_reference": "CI-2026-0418",
    "order_reference": "KA-PO-77104",
    "port_of_loading": "Constanta, Romania",
    "port_of_discharge": "New York, NY, United States",
    "vessel_or_flight": "MV Danube Trader, voyage 214E",
    "container_number": "MSCU 481 2263",
    "seal_number": "RO0094771",
    "cartons": [
      {
        "marks_and_numbers": "KESTREL / 1 of 5",
        "package_type": "Double wall carton",
        "contents": "Benchtop conductivity meter NC-220",
        "tariff_heading": "9027.80",
        "units": "6",
        "net_weight": "13.2 kg",
        "gross_weight": "15.6 kg",
        "dimensions": "60 x 40 x 38 cm",
        "volume": "0.091 cbm"
      },
      {
        "marks_and_numbers": "KESTREL / 2 of 5",
        "package_type": "Double wall carton",
        "contents": "Benchtop conductivity meter NC-220",
        "tariff_heading": "9027.80",
        "units": "6",
        "net_weight": "13.2 kg",
        "gross_weight": "15.6 kg",
        "dimensions": "60 x 40 x 38 cm",
        "volume": "0.091 cbm"
      },
      {
        "marks_and_numbers": "KESTREL / 3 of 5",
        "package_type": "Single wall carton",
        "contents": "Flow through conductivity cell, four electrode",
        "tariff_heading": "9027.90",
        "units": "24",
        "net_weight": "7.2 kg",
        "gross_weight": "8.4 kg",
        "dimensions": "50 x 35 x 25 cm",
        "volume": "0.044 cbm"
      },
      {
        "marks_and_numbers": "KESTREL / 4 of 5",
        "package_type": "Single wall carton",
        "contents": "Calibration standard set, boxed bottles",
        "tariff_heading": "3822.90",
        "units": "6",
        "net_weight": "9.0 kg",
        "gross_weight": "10.2 kg",
        "dimensions": "40 x 30 x 30 cm",
        "volume": "0.036 cbm"
      },
      {
        "marks_and_numbers": "KESTREL / 5 of 5",
        "package_type": "Carton, papers and spares",
        "contents": "Power leads, manuals, spare fuses",
        "tariff_heading": "8544.42",
        "units": "1",
        "net_weight": "0.4 kg",
        "gross_weight": "2.0 kg",
        "dimensions": "40 x 30 x 20 cm",
        "volume": "0.024 cbm"
      }
    ],
    "total_packages": "5 cartons on 1 euro pallet",
    "total_net_weight": "43.0 kg",
    "total_gross_weight": "51.8 kg",
    "total_volume": "0.286 cbm",
    "packing_notes": "Meters packed upright with corner protectors. Calibration standards kept away from the pallet edge. Pallet shrink wrapped and corner strapped.",
    "packed_by": "Vlad Anton, packing station 2",
    "checked_by": "Ioana Preda, Export Manager"
  }
}
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 Export Packing List template with packing list number "PL-2026-0418" and date "August 14, 2026".

How the MCP server works →

More logistics templates