Order raised or shipment leaves → the paperwork with it

The warehouse cannot wait for someone to open a spreadsheet.

Trigger → artefact

An order is approved, or a shipment is dispatcheda purchase order, a quotation or a packing slip, as PDF bytes

Operational documents are boring and unforgiving. A packing slip with the wrong quantity is a return; a purchase order without terms is an argument later. They also have to exist the second the event happens, which rules out anything a human has to touch.

One call, one document, same shape as the rest of the API. The purchase order template also produces quotations — the same document with a different heading and a validity date — so one integration covers both.

Built with the HTML API. Need a designed image or certificate instead? Use the Canvas API — same data, same free year.

A purchase order PDF rendered by PixlDocs, with line items, terms and a signature block
Purchase order / quotation — rendered by the template this page calls.

What ships in this category

The documents, and the part of each that is hard.

A purchase order PDF rendered by PixlDocs, with line items, terms and a signature block

Purchase order / quotation

Issuer and counterparty, line items with tax, delivery and payment terms, and a signature block. Switches to a quotation with one field.

Hard part One template, two documents — PO and quote, chosen by a field.

template_id d2ae4fc2-7e6b-4e1d-bcfb-ba3e4bea5b66

A delivery note and packing slip PDF rendered by PixlDocs, showing shipped quantities and carrier details

Delivery note / packing slip

Ship-to and bill-to, carrier and tracking, ordered versus shipped quantities, and a goods-received signature area.

Hard part Ordered vs shipped vs back-ordered quantities on every line.

template_id 235509e4-acfe-4088-b724-b544a14595e8

A branded order confirmation PDF rendered by PixlDocs, showing items, delivery window and totals

Order confirmation

The branded document the customer receives the second the order lands: items, delivery window, address, and the totals they just agreed to.

Hard part Your logo, accent colour and typeface from the workspace brand kit, not ours.

template_id fd1e7566-c1dd-4530-b1bb-66396691cd78

The whole integration

One call. Named fields. No SDK to install.

the call your product makesbash
# when the shipment is dispatched
curl https://api.pixldocs.com/v1/render \
  -H "Authorization: Bearer $PIXLDOCS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": "235509e4-acfe-4088-b724-b544a14595e8",
    "format": "pdf",
    "data": {
      "document_number": "DN-2026-0912",
      "dispatch_date": "2026-08-04",
      "customer_name": "Northwind Traders",
      "carrier": "Blue Dart",
      "tracking_number": "BD4471902233",
      "line_items": [
        { "description": "Desk lamp, matte black", "sku": "LMP-002", "qty_ordered": 12, "qty_shipped": 12 }
      ]
    }
  }' --output delivery-note.pdf

Run against the API before publishing: 200, application/pdf. Set document_kind to “quotation” on the purchase order template and the same call returns a quote.

The contract

Exactly what you send, exactly what you get.

These templates take named keys — no positional arguments, no layout to describe. Send a row array and the pagination follows it.

Purchase order / quotation

d2ae4fc2-7e6b-4e1d-bcfb-ba3e4bea5b66

Fields · 32

document_kindissuer_nameissuer_addressissuer_emailissuer_phoneissuer_tax_idcounterparty_namecounterparty_attncounterparty_addresscounterparty_emailcounterparty_tax_iddocument_numberdocument_datereferencerequired_bycurrency_codecurrency_localediscount_labeldiscount_percent #freight_labelfreight_amount #tax_labeltax_rate #approval_limit #authorised_byauthorised_titledelivery_addressdelivery_termspayment_termswarranty_termsnotescontact_email

Rows · line_items[]

description · part_no · qty · unit · unit_price · need_by

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Delivery note / packing slip

235509e4-acfe-4088-b724-b544a14595e8

Fields · 28

issuer_nameissuer_addressissuer_emailissuer_phoneissuer_tax_idcustomer_namecustomer_attncustomer_accountship_to_addressbill_to_addressdocument_numberdocument_datedispatch_dateorder_numberorder_dateshipment_sequencecarrierservice_leveltracking_numbervehicle_referenceincotermsdelivery_windowhandling_notesnotescontact_emailshow_valuescurrency_codecurrency_locale

Rows · line_items[]

description · sku · batch · unit · qty_ordered · qty_shipped · unit_price

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Rows · packages[]

package_id · package_type · weight_kg · dimensions · contents

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Order confirmation

fd1e7566-c1dd-4530-b1bb-66396691cd78

Fields · 24

brand_colormerchant_namemerchant_urlsupport_emailheadlineintroorder_numberorder_datecustomer_namecustomer_emailpayment_methoddelivery_namedelivery_addressdelivery_estimateshipping_methodtracking_urlcurrency_codecurrency_localetax_labeltax_percent #shipping_amount #discount_labeldiscount_amount #footer_note

Rows · items[]

description · quantity · unit_price

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

What you would ask next.

We need a barcode on the packing slip.

Not today. You can place an image you host, so a barcode you already generate will render — but we do not generate the barcode itself. If that blocks you, say so and it moves up.

Can it print on our pre-printed stationery?

Yes — page size and margins are yours to set, and the PDF is pure vector, so it prints at whatever the printer can do rather than at a raster resolution we chose.

Our ERP sends XML, not JSON.

Then something in the middle has to translate, and it is not us. We take JSON over HTTPS; that is the whole interface.

Your system already knows when the document is owed.

Free to start · No credit card required