1. Upload
Send the files with your key. A KiCad project or a Gerber zip; for assembly also a BOM and pick-and-place (KiCad projects make their own); any fabrication drawing, stackup PDF or README goes to ProvenMetal’s team.- A whole project goes up fastest as one
.zip, or a.tgz(unpacked on arrival):tar -czf - board/ | curl ... -F 'files=@-;filename=upload.tgz'. - Each part must be named
files. Up to 20 files, 50 MB each, 100 MB in all. upload_urltakes more files for two hours with no key (the same multipart form), andPOST /v1/uploadswith no files returns only the link.- Files are kept six hours after the last one arrives. Treat
upload_idas a secret: anyone with it can quote the files.
2. Quote
wait_s (default 30, at most 150) the answer is 202 with a request_id to poll:
quote tool is accepted under the same name: board options (layers, thickness_mm, surface_finish, solder_mask, copper_oz, inner_copper_oz, material), advanced fabrication (jlc_options, via_process, impedance_controlled, jlc_stackup, file_stackup, separate_boards), parts (substitutions, customer_supplied_refs, do_not_fit_refs, staff_picks_parts), special_requirements, special_notes, standard_for_unstated, board, skip_board_checks, board_context and itar. GET /v1/capabilities lists JLCPCB’s materials and services.
3. Answer what the files don’t say
Options are read from the files (ODB++, Gerber job files, Altium reports, the KiCad board’s setup). Anything else comes back as 422needs_details:
"surface_finish": "enig"), or with "standard_for_unstated": true if they accept JLCPCB’s standard for the rest (1.6 mm, lead-free HASL, 1 oz outer and 0.5 oz inner copper, green, FR-4, no special requirements).
4. Review quotes
mode: "review" means ProvenMetal’s team quotes it: options JLCPCB’s API can’t price (custom_quote_reasons), or parts that couldn’t be priced (unpriced_parts, each with why and what was searched). The customer requests the full quote at checkout_url. When only the assembly is unpriced, fabrication_quote is an instant price for the bare boards with its own checkout link.
An unpriced part may carry a similar_part in stock. If the customer approves it, quote again with:
5. Checkout
Send the customer tocheckout_url. With a full ship_to, delivery is already saved (delivery_saved: true) and they only pay; otherwise they enter the rest there. They make their ProvenMetal account when they pay.
When the email in ship_to belongs to a returning customer with a saved card and address, the quote says saved_details: true. After the customer says yes to buying with them:
1
Email a code
POST /v1/quotes/{quote_id}/saved/code2
Check it
POST /v1/quotes/{quote_id}/saved/verify with {"code": "123456"}. Show the customer summary (total, card, ship-to).3
Pay
POST /v1/quotes/{quote_id}/saved/pay with {"confirm_token": "..."}. A declined card answers 402 with checkout_url.6. Follow it
status is quote_ready, awaiting_payment, sourcing_ready, sourcing_requested, sourcing_quoted, expired, ordered, in_production or shipped, with order_ref once paid and tracking once shipped.