Triplicate for AI agents and developers
Let ChatGPT, Claude or your own software create export documents with Triplicate: a matching proforma invoice, commercial invoice, packing list and shipping instruction from one set of order data. Free, no key, nothing stored.
MCP server · JSON API (curl) · OpenAPI
MCP server
Remote MCP server (Streamable HTTP, no sign-in):
https://api.triplicatedocs.com/mcp
In Claude, you can also add Triplicate from the connectors directory, where it is listed as a community connector: claude.ai/directory/connectors/triplicate.
Add it as a custom connector in an AI assistant that supports remote MCP servers, or in your own agent. For clients that only run local servers, use a bridge such as mcp-remote:
{
"mcpServers": {
"triplicate": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.triplicatedocs.com/mcp"
]
}
}
}
Tools
- create_trade_documents – order data in; a link to the filled-in proforma invoice, commercial invoice, packing list and shipping instruction (or, with open_document "po", a purchase order to the supplier, with "sc" a sales contract for both parties to sign, or with "co" a non-preferential certificate of origin; imperial_units adds pounds and cubic feet; an item's country_of_origin shows the origin per item; older names such as C&F, DDU and DAT become CFR, DAP and DPU) out, with totals (amount, cartons, net and gross weight, CBM) and checks (missing fields, HS code format, Incoterms freight and insurance).
- lookup_hs_code – search the HS 2022 nomenclature (6 digits) by English description or code prefix.
- calculate_shipment – CBM, gross weight, air and express chargeable weight, LCL revenue tons and container fit from carton sizes.
- calculate_export_price – unit cost, markup and shipment costs in; the quotation price under EXW, FCA, FOB, CFR, CIF (or FCA, CPT, CIP), DAP, DPU and DDP out, in total and per unit, each with a link to a proforma invoice at that price.
- lookup_port_code – the UN/LOCODE of a seaport, airport or inland depot by place name (or check a code), with the country and type, for the port of loading or discharge.
- check_container_number – check a container number (ISO 6346 check digit), see who owns the prefix (shipping line or leasing company) and get the line's official tracking page; bill of lading numbers are recognised by the carrier's SCAC prefix. No live status: the line's site shows it.
- prepare_shipment – the same order data plus the destination country (ISO code) in; the filled-in documents link with totals and checks, Triplicate's guides for that destination and the products' HS chapters, a landed cost calculator link preset to the market, goods value and quantity, and HS lookups for items without a code.
- check_transport_document_draft – the text of the forwarder's bill of lading or air waybill draft plus the order data in; each field (shipper, consignee, notify party, ports, vessel and voyage, packages, gross weight, CBM, freight prepaid or collect against the Incoterms rule, marks, goods description, L/C number) back as ok, warning, mismatch or info, so the user can ask for corrections before the original is issued. Also POST /api/v1/draft-check.
- read_letter_of_credit – the text of a documentary credit (SWIFT MT700 as the bank advised it) in; the credit number, dates, amount and tolerance, partial shipments and transhipment, latest shipment, ports, presentation period, goods, the documents required (each with how to make it) and additional conditions back, plus a
letter_of_creditobject to pass to create_trade_documents so the generator checks the documents against the credit. Also POST /api/v1/letter-of-credit. - search_trade_guides – search Triplicate's trade guides (cosmetics registration by country, US tariffs, EORI, certificates of origin, HS classification, Incoterms, letters of credit, dangerous goods) and get page links and excerpts to cite.
Example prompt: “Make the commercial invoice and packing list for this order with Triplicate: …” The assistant returns a link; you check the documents there and save the PDF.
JSON API
Free, no key. OpenAPI description. Try it with one command:
curl -s https://api.triplicatedocs.com/api/v1/documents \
-H 'Content-Type: application/json' \
-d '{
"document": {"number": "HB-101"},
"seller": {"name": "Hanbit Trading"},
"buyer": {"name": "Nordic Home AB", "address": "Malmo, Sweden"},
"terms": {"incoterm": "FOB", "place": "Busan", "currency": "USD"},
"items": [{"description": "Ceramic mug", "quantity": 2400, "unit_price": 1.85}]
}'
It returns JSON: url (open it to see the filled-in invoice, packing list and other documents, then save the PDF), totals and checks — what is still missing for this short order (HS codes, pieces per carton, country of origin, bank details). A sample response for the full order below is further down.
With a full order in a file:
curl -s https://api.triplicatedocs.com/api/v1/documents \
-H 'Content-Type: application/json' \
-d @order.json
Request body (order.json):
{
"language": "en",
"open_document": "ci",
"document": {
"number": "INV-2026-001",
"date": "2026-10-01",
"po": "PO-778"
},
"seller": {
"name": "HANBIT COSMETICS CO., LTD.",
"address": "45 Teheran-ro, Gangnam-gu\nSeoul 06164, Korea",
"tax_id": "123-45-67890"
},
"buyer": {
"name": "SAIGON BEAUTY TRADING CO., LTD.",
"address": "88 Nguyen Hue Blvd, District 1\nHo Chi Minh City, Vietnam"
},
"terms": {
"incoterm": "CIF",
"place": "Cat Lai",
"payment": "T/T 30% deposit, 70% before shipment",
"currency": "USD"
},
"shipment": {
"port_of_loading": "Busan, Korea",
"port_of_discharge": "Cat Lai, Vietnam",
"etd": "2026-10-08",
"country_of_origin": "Republic of Korea"
},
"charges": {
"freight": 450,
"insurance": 38.5
},
"items": [
{
"description": "Hydrating Toner 150ml",
"hs_code": "3304.99",
"quantity": 2400,
"unit": "PCS",
"unit_price": 3.2,
"pieces_per_carton": 48,
"net_weight_per_carton_kg": 9.6,
"gross_weight_per_carton_kg": 11.2,
"carton_length_cm": 40,
"carton_width_cm": 30,
"carton_height_cm": 28
}
],
"bank": {
"bank_name": "EXAMPLE BANK",
"swift": "EXMPKRSE",
"account": "000-000000-00-000",
"beneficiary": "HANBIT COSMETICS CO., LTD."
}
}
Response:
{
"url": "https://triplicatedocs.com/?utm_source=api&utm_campaign=documents#d=jZNNbxoxEIb...",
"opens": "ci",
"totals": {"currency": "USD", "subtotal": 7680, "freight": 450, "insurance": 38.5, "total": 8168.5,
"quantity": {"PCS": 2400}, "cartons": 50, "net_weight_kg": 480, "gross_weight_kg": 560, "cbm": 1.68},
"checks": [],
"next": "Give the user this link. It opens Triplicate's free generator with everything filled in; ..."
}
POST https://api.triplicatedocs.com/api/v1/documents– documents link, totals and checks.GETon the same path returns the full input schema.POST https://api.triplicatedocs.com/api/v1/shipment-plan– the same order data plusdestination_country→ documents link with checks, guides for the destination and HS chapters, landed cost link, HS lookups.GETreturns the input schema.POST https://api.triplicatedocs.com/api/v1/hs–{"query": "cotton t-shirts"}→ HS 2022 candidates.POST https://api.triplicatedocs.com/api/v1/shipment–{"cartons": [{"length_cm": 40, "width_cm": 30, "height_cm": 28, "quantity": 50, "gross_weight_kg": 11.2}]}→ CBM and chargeable weight.POST https://api.triplicatedocs.com/api/v1/price–{"quantity": 2400, "unit_cost": 2.5, "markup_percent": 25, "costs": {"main_freight": 1200, "insurance_rate_percent": 0.3}}→ quotation price under each Incoterms rule, with proforma links.GETreturns the input schema.POST https://api.triplicatedocs.com/api/v1/guides–{"query": "EORI number for UK imports"}→ guide pages and excerpts.POST https://api.triplicatedocs.com/api/v1/ports–{"query": "Haiphong"}→ UN/LOCODE port, airport and inland depot codes.GETreturns the input schema.
Currencies: USD, EUR, GBP, JPY, CNY, KRW, VND, AUD, CAD, CHF, HKD, SGD, INR, PKR, BDT, IDR, THB, MYR, PHP, AED, SAR, TRY, BRL, MXN, ZAR, NGN, KES, EGP. Units: PCS, SETS, BOXES, PAIRS, DOZ, KG, MT, M, SQM, CBM, L, ROLLS, BAGS. Incoterms 2020 rules. Up to 100 items.
How the link works and what is stored
The documents are not stored anywhere. The API turns the order data into a link to the generator with the data packed into the part after #, which browsers never send to a server; the page reads it in the browser, fills in the form and removes it from the address bar. If the form already holds the user's own data, the page asks before replacing it.
The API processes each request in memory and keeps nothing; we count only how many calls each tool gets per day. Your IP address is used briefly in memory to limit requests (30 per minute) and is not saved. See the privacy policy.
Common questions
Is it free?
Yes. The MCP server and the API are free with no key, within fair use (30 requests per minute per IP). The generator itself is free; Triplicate Pro ($1 a month or $10 a year) adds saved companies (exporter profiles), buyers and products, company stamp and logo and other extras.
Does Triplicate keep the order data?
No. The data is only in the link the API returns. The generator keeps the filled-in form in the user's own browser, like any form typed by hand.
Are the HS codes and checks final?
No. HS suggestions are 6-digit international codes to confirm in the destination country's tariff, and the checks catch common mistakes but do not replace a review by the exporter or a customs broker.
Can I generate the PDF directly?
The PDF is saved from the generator page with the browser's print dialog, after the user has reviewed the documents. This keeps a person in control of what is sent to a buyer or to customs.
More free tools
Triplicate is free and keeps getting better. Found it useful? Support Triplicate ♥