Formada3D logoFormada3DQuote API Open the quote page
For AI assistants, agents and scripts

Get a 3D printing quote by API

POST a 3D file (STL, 3MF or OBJ) or a public file link, get the same server-side price our quote page shows, and a checkout link the person pays on. Prices in AUD, no GST (not GST-registered). No API key, no account. Rate limited per IP.

JSON over HTTPSOpenAPI 3.1MCP (Streamable HTTP)CORS openlive

How ordering works. The API never takes a payment and never sees card details. Every quote comes back with a checkout_url that opens that exact quote on our normal quote page (3D preview, options, same price). The customer reviews and pays there by card, or by invoice / PO with a business account. The price is re-checked server-side at checkout.

Endpoints

MethodURLWhat
GEThttps://formada3d.com/api/quote/v1/optionsMaterials, colours, settings, lead times, countries, limits
POSThttps://formada3d.com/api/quote/v1/quotePrice a file: multipart file field, or JSON file_url / file_base64
GEThttps://formada3d.com/api/quote/v1/quote/{quote_id}Quote by id (status, prices, checkout link)
GEThttps://formada3d.com/api/quote/v1/quote?file_url=…&material=PLA&qty=1Same as the POST, for clients that can only GET (add format=html|text)
GEThttps://formada3d.com/api/quote/v1/estimate?shape=box&x=10&y=10&z=10&material=PLAEstimate from a size, no file (box / cylinder / sphere / volume_cm3)
GEThttps://formada3d.com/api/quote/v1/openapi.jsonOpenAPI 3.1 spec
POSThttps://formada3d.com/api/quote/v1/mcpMCP endpoint: tools get_quote, get_quote_status, quote_options

1. Upload a file (multipart)

curl -X POST https://formada3d.com/api/quote/v1/quote \
  -F [email protected] -F material=PETG -F colour=Black -F quantity=4 -F infill=25

2. Or send a public link (JSON)

curl -X POST https://formada3d.com/api/quote/v1/quote -H 'Content-Type: application/json' \
  -d '{"file_url":"https://example.com/parts/bracket.stl","material":"PLA","quantity":2,"country":"AU"}'

3. Can your assistant only GET? (no uploads, no POST)

Many AI sandboxes can open a URL but cannot POST a file. Both of these are plain links, and add &format=html or &format=text for a readable page:

# estimate with NO file: a 10 mm cube in PLA (labelled "estimate"; exact price after upload; cacheable, nothing stored)
https://formada3d.com/api/quote/v1/estimate?shape=box&x=10&y=10&z=10&material=PLA&qty=1

# cylinder 30 mm diameter x 20 mm high, PETG x5, as text      sphere / volume_cm3= also work
https://formada3d.com/api/quote/v1/estimate?shape=cylinder&x=30&z=20&material=PETG&qty=5&format=text

# real quote from a public file link (we fetch it; quote stored; checkout_url returned)
https://formada3d.com/api/quote/v1/quote?file_url=https://example.com/cube10mm.stl&material=PLA&qty=1&format=json

Every response spells the money out in breakdown: parts, express surcharge, production-partner setup, minimum-order top-up (every order is at least A$8), shipping, total.

AI assistants: get an instant estimate, no upload needed

Using ChatGPT, Claude, Grok or another assistant? Paste one of these links into the chat and it reads a live price from our engine (estimate for a solid of that size; the exact price comes from your file). Change the numbers (mm) and material.

Have a file link? https://formada3d.com/api/quote/v1/quote?file_url=…&material=PLA&qty=1&format=text returns the price and a pay link. API + MCP docs · How-to guide

Example prices (live from the engine)

Computed by the same engine for generated solids, qty 1, 15 % infill, 0.2 mm layers, shipped within Australia. Estimates: the exact price comes from your uploaded file. Raw data: examples.json (JSON, dated, refreshed hourly).

PartMaterialPart priceMin-order top-upAU shippingTotal deliveredGrams · print timeURL
10 mm cubePLAA$0.71A$7.29A$10.00A$18.000.7 g · 0 h 17 mintext
10 mm cubePETGA$0.71A$7.29A$10.00A$18.000.7 g · 0 h 17 mintext
100 x 50 x 20 mm barPLAA$5.90A$2.10A$10.00A$18.0032.3 g · 1 h 3 mintext
100 x 50 x 20 mm barPETGA$6.17A$1.83A$10.00A$18.0033.1 g · 1 h 12 mintext
30 mm dia x 50 mm cylinderPLAA$2.59A$5.41A$10.00A$18.0012.4 g · 0 h 44 mintext
30 mm dia x 50 mm cylinderPETGA$2.71A$5.29A$10.00A$18.0012.7 g · 0 h 48 mintext
120 x 100 x 50 mm boxPLAA$28.70A$0.00A$10.00A$38.70153.5 g · 4 h 4 mintext
120 x 100 x 50 mm boxPETGA$30.10A$0.00A$10.00A$40.10157.2 g · 4 h 48 mintext

Snapshot generated 13 October 2026 17:10 AEDT by the live engine (total_au_delivered = part price, topped up to the A$8 minimum order, + A$10 tracked AU shipping (free over A$100).); the page refreshes it from examples.json when scripts run.

Loading live example prices…

Try it: build a URL and see the price

Response (shortened)

{
  "quote_id": "k7m2p9x4qwz3n8r5",
  "status": "instant_price",            // or partly_on_request · on_request · held_for_review · expired
  "currency": "AUD",
  "valid_until": "2026-11-12T08:00:00.000Z",
  "checkout_url": "https://formada3d.com/quote/?q=k7m2p9x4qwz3n8r5",
  "how_to_order": "Send the person to checkout_url ...",
  "price": { "parts": 23.60, "lead_surcharge": 0, "minimum_order_topup": 0, "subtotal": 23.60,
             "shipping": 10, "shipping_label": "Tracked shipping (AU)", "total": 33.60,
             "gst": "No GST (Formada3D is not GST-registered); prices in AUD",
             "lead": "Standard", "lead_time": "3-5 business days", "express_available": true },
  "parts": [ { "name": "bracket.stl", "quantity": 4, "material": "PETG", "colour": "Black", "each": 5.90, "total": 23.60,
               "grams_each": 21.4, "print_time_each": "1 h 32 min", "size_mm": [62.0, 40.0, 18.5],
               "checks": { "fits_our_printers": true, "suggested_printer": "P2S", "watertight": true, "thin_wall_share": 0 },
               "verified": "server-slice", "bulk_prices": [ ... ] } ],
  "warnings": []
}

Fields

FieldValues
materialIn stock: PLA (default), PETG, TPU. Ordered in (+3–5 days): PLA_MATTE, PLA_SILK, PLA_METAL, PLA_GALAXY, PETG_TRANS, ABS, ASA. Production network (~2–3 weeks, A$8 setup): MJF_PA12, SLS_PA12, SLS_PA12GB, SLA_WHITE, SLA_GREY, SLA_BLACK, SS316L, TI64, PEEK, PEKK, PA12_CF, ABS_ESD. The live list is in /options.
colourBlack, White, Grey, Silver, Red, Blue, Navy, Green, Yellow, Orange, Purple, Pink, Beige, Brown, Teal, Clear
quantity1–10000 (bulk tiers apply automatically)
infill · layer_height · walls · supports10/15/25/40/60/100 % · 0.12/0.16/0.2/0.28 mm · 2/3/4 · auto/off
unitsmm (default), cm, in: the units the file was modelled in
leadstandard (3–5 business days) or express (48 h dispatch, +30 %, in-stock materials)
country · ship_methodISO code, default AU · standard / express (AU)
businesstrue: checkout opens on business.formada3d.com (invoice / PO)
part_name · notesName on the quote (default file name) · notes for us, max 500 chars

Limits and rules

MCP (Claude, ChatGPT, Grok and other MCP clients)

Add the endpoint as a remote MCP server (Streamable HTTP, JSON-RPC 2.0, no auth):

{ "mcpServers": { "formada3d-quote": { "url": "https://formada3d.com/api/quote/v1/mcp" } } }

Prefer the GET estimate endpoint if file upload is blocked in your assistant's sandbox: it needs no POST and no file. For a real file, give it a public link via the GET quote?file_url= route.

Tools: get_quote(file_url | file_base64 + file_name, material, quantity, colour, …), get_quote_status(quote_id), estimate_quote(shape, x, y, z | volume_cm3, material, quantity), quote_options(). Our wider MCP server with the whole shop, design studios, materials guide and order status is at mcp.formada3d.com (docs).

Pricing

Same code as the quote page: in-house FDM is priced from the sliced file (grams in A$/g brackets plus print time, fitted to our Bambu Lab printer profiles), bulk tiers from 5 pieces, A$8 minimum per order, express +30 %. Production-network materials are priced from the part volume plus A$8 setup per order. Shipping: AU A$10 tracked (free over A$100), A$15 express; NZ A$15; US A$20; other listed countries A$25.

Questions: [email protected] · quote page · llms.txt