Synthony
Early access

Generate industry-accurate mock documents
with matching JSON ground truth.

For evaluating and fine-tuning document AI. Freight, healthcare, finance — on demand, via API.

By joining, you agree to our Privacy Policy.
response.json
{  "document_type": "bill_of_lading",  "generated_at": "2026-05-10T09:14:22Z",  "document": {    "bl_number": "MAEU240912847",    "shipper": {      "name": "Pacific Export Co. Ltd",      "address": "12 Quay St, Auckland 1010",      "country": "NZ"    },    "consignee": {      "name": "Europa Freight GmbH",      "address": "Hafenweg 14, Hamburg",      "country": "DE"    },    "vessel": "MAERSK ELGIN",    "voyage": "024W",    "port_of_loading": "NZAKL",    "port_of_discharge": "DEHAM",    "containers": [      {        "container_id": "MSKU7823041",        "type": "40HC",        "seal": "NZ9913847",        "weight_kg": 24810,        "commodity": "Frozen Lamb"      }    ]  },  "ground_truth": {    "bl_number": "MAEU240912847",    "port_loading_unlocode": "NZAKL",    "port_discharge_unlocode": "DEHAM",    "container_count": 1,    "total_weight_kg": 24810  }}
200 OK · 148ms · bill_of_lading
How it works

From API call to eval result in three steps.

No document generators to configure, no hand-labelling. Synthony handles the synthesis — you focus on measuring your model.

01

Pick a document type

Choose from bill of lading, customs invoice, health claim, remittance advice, and 40+ other schemas. Pass locale and any field overrides.

request.json
POST /v1/generate{  "type": "bill_of_lading",  "locale": "AU",  "overrides": {    "port_of_loading": "AUMEL"  }}
02

Receive document + ground truth

The API returns a rendered PDF alongside a JSON object with every extractable field value — exactly what your extraction model should output.

response.json
{  "document_url": "https://cdn.synthony.dev/bl_7f3a.pdf",  "ground_truth": {    "bl_number": "MAEU240912847",    "port_loading": "AUMEL",    "consignee": "Europa Freight GmbH",    "total_weight_kg": 24810  }}
bl_7f3a.pdf · generated output
BILL OF LADING
NON-NEGOTIABLE · ORIGINAL
B/L Number
MAEU240912847
SHIPPER
Pacific Export Co. Ltd
12 Quay St, Auckland 1010, NZ
CONSIGNEE
Europa Freight GmbH
Hafenweg 14, Hamburg, DE
VESSEL
MAERSK ELGIN
VOYAGE
024W
PORT OF LOADING
AUMEL
PORT OF DISCHARGE
DEHAM
Container No.TypeSeal No.CommodityGross Weight
MSKU782304140HCNZ9913847Frozen Lamb24,810 KG
Issued by: Maersk Line A/S
Date of Issue: 10 May 2026
Place of Issue: Melbourne, AU
AUTHORISED SIGNATURE
200 OK · PDF + PNG available
03

Run your eval or test

Feed the PDF to your model, compare extracted fields against ground truth. Compute precision, recall, and field-level accuracy at any scale.

eval.py
accuracy = evaluate(  predicted=model.extract(pdf),  ground_truth=response["ground_truth"])print(accuracy)# { "overall": 0.94, "bl_number": 1.0,#   "total_weight_kg": 0.87 }
Use cases

What teams build with Synthony.

AI model evals

Benchmark your extraction model against hundreds of realistic documents with known-good answers. Catch regressions before they reach production.

Integration testing

Seed your CI pipeline with repeatable, deterministic documents. No more brittle fixtures scraped from real data.

QA & demo environments

Populate demo tenants or QA databases with high-fidelity synthetic records. Safe to share, safe to delete.

Fine-tuning datasets

Generate thousands of document-label pairs at scale. Label noise is zero — ground truth is computed at generation time.

Field overrides

Pin any field to your own data.

Lock specific fields — shipper, patient, payer, port codes, currency — to your values. Synthony synthesises everything else around them.

100% generative output — type any names, IDs, or locations. No real PII required.
api request
request.json
POST /v1/generate{  "type": "bill_of_lading",  "locale": "AU",  "overrides": {    "shipper.name": "Pacific Export Co. Ltd",    "consignee.name": "Europa Freight GmbH",    "port_of_loading": "AUMEL",    "port_of_discharge": "DEHAM"  }}
generated response
response.json
{  "document_url": "https://cdn.synthony.dev/bl_7f3a.pdf",  "ground_truth": {    "bl_number": "MAEU240912847",    "shipper": "Pacific Export Co. Ltd",    "consignee": "Europa Freight GmbH",    "port_of_loading": "AUMEL",    "port_of_discharge": "DEHAM",    "locale": "AU",    "total_weight_kg": 24810  }}
noise controls

Train against the noise your model will actually see.

Tears, blur, skew, stains, missing fields — dialed in via the API. 100% generative output, so use any names, IDs, or locations. No real PII required, no anonymisation step.

Generation
Seed
Noise level
moderate · 55
Live preview
seed: eval-2026-q2
BILL OF LADING
NON-NEGOTIABLE · ORIGINAL
B/L Number
MAEU240912847
SHIPPER
Pacific Export Co. Ltd
12 Quay St, Auckland 1010, NZ
CONSIGNEE
Europa Freight GmbH
Hafenweg 14, Hamburg, DE
VESSEL
MAERSK ELGIN
VOYAGE
024W
PORT OF LOADING
AUMEL
PORT OF DISCHARGE
DEHAM
Container No.TypeSeal No.CommodityGross Weight
MSKU782304140HCNZ9913847Frozen Lamb24,810 KG
Issued by: Maersk Line A/S
Date of Issue: 10 May 2026
Place of Issue: Melbourne, AU
AUTHORISED SIGNATURE
api request
request.json
POST /v1/generate{  "type": "bill_of_lading",  "mode": "deterministic",  "seed": "eval-2026-q2",  "noise": {    "level": 0.55,    "scan_blur": true,    "paper_tears": false,    "coffee_stains": false,    "skewed_scan": true,    "faded_ink": true,    "drop_random_fields": 0  }}
document packs

Whole document sets. Perfectly consistent.

Request a pack and get multiple related documents with shared field values stitched across all of them — ready for multi-document extraction evals.

01
Bill of lading
bill_of_lading
02
Commercial invoice
commercial_invoice
03
Packing list
packing_list
04
Cert. of origin
certificate_of_origin
shared across all documents
shipperconsigneeport codescargo ref
api request
request.json
POST /v1/pack{  "pack": "freight_shipment",  "locale": "AU",  "count": 1}
response
response.json
{  "pack_id": "pk_9a2f8b1c",  "shared": {    "shipper": "Pacific Export Co.",    "consignee": "Europa Freight GmbH",    "reference": "SHP-2026-4821"  },  "documents": [    { "type": "bill_of_lading",       "url": "cdn.synthony.dev/bl_7f3a.pdf" },    { "type": "commercial_invoice",   "url": "cdn.synthony.dev/ci_8b4d.pdf" },    { "type": "packing_list",         "url": "cdn.synthony.dev/pl_3c7e.pdf" },    { "type": "certificate_of_origin","url": "cdn.synthony.dev/co_1a9f.pdf" }  ]}
By industry

Built for your document stack.

Synthony ships schemas for every major document type across freight, healthcare, and finance — each with realistic data variance and exact ground truth.

Test your freight extraction pipeline end-to-end.

Generate Bill of Ladings, customs entries, and airway bills that mirror real-world variance — different carriers, port codes, Incoterms, and weight formats — with exact ground truth for every field.

OCR model benchmarking

Stress-test extraction across document layouts, fonts, and scan quality. Ground truth is always exact.

Carrier format variance

Generate Bills of Lading in MSC, Maersk, ONE, CMA CGM, and other carrier-specific layouts. Your model handles every variant.

Compliance QA

Generate edge-case documents — missing port codes, split consignees, multi-currency invoices — to validate your rules engine.

Demo environments

Populate demo tenants with high-fidelity shipment data. Safe to share, safe to reset.

8 document schemas
Bill of Lading
Commercial Invoice
Customs Entry
Packing List
Airway Bill
Certificate of Origin
Delivery Order
Dangerous Goods Declaration
integrations

Drops into the stack you already use.

Same API, three entry points. Run Synthony from your terminal, wire it into CI for reproducible eval fixtures, or expose it to Claude Code and Codex over MCP.

Command line

Generate documents from the terminal. Ideal for ad-hoc test data or scripted batches piped into your local eval suite.

  • Single binary, no install — runs via bunx or npx
  • Streams ground-truth JSON to stdout or a file
  • Deterministic with --seed for repeatable runs
terminal
$ bunx synthony generate \    --type bill_of_lading \    --locale AU \    --count 25 \    --seed eval-2026-q2 \    --out ./fixtures# generated 25 documents# wrote ground truth to fixtures/_ground_truth.json
ready to ship

Get early access to the API.

We’re rolling out access now. Join the waitlist and we’ll send your API key as soon as a spot opens.