> ## Documentation Index
> Fetch the complete documentation index at: https://docs.provenmetal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How ordering works

> Upload, questions, price, checkout.

```mermaid theme={"dark"}
flowchart TD
  U["Upload<br/><code>upload</code> + curl"] --> Q{"Quote<br/><code>quote</code>"}
  Q -->|needs_details| A["Ask the user once"]
  A --> Q
  Q -->|instant price| C["Checkout link"]
  C --> P["Customer pays"]
  P --> S["Track it<br/><code>order_status</code>"]
  Q -->|review| R["Custom quote link<br/>to ProvenMetal's team"]
  classDef accent stroke:#ff0021,stroke-width:2px
  class Q,C accent
```

## 1. Upload

`upload` returns a signed link and a ready-made command:

```bash theme={"dark"}
tar -czf - board.kicad_pcb board.kicad_sch bom.csv | curl -fsS -F 'files=@-;filename=upload.tgz' <upload_url>
```

* **Bare boards:** KiCad project or Gerber zip.
* **Assembly:** add BOM and pick-and-place (made automatically from KiCad).
* **Documents:** up to six drawings or READMEs (30 MB) go to ProvenMetal's team.

The agent never writes into your project.

## 2. Questions

Board options come from the files (ODB++, Gerber job, Altium reports, KiCad setup). Anything missing comes back as `needs_details`:

```json theme={"dark"}
{
  "ok": false,
  "error": "needs_details",
  "questions": [
    { "option": "surface_finish", "question": "Which surface finish?", "choices": ["hasl_lead_free", "enig"], "usual": "hasl_lead_free" }
  ],
  "known": { "layers": 2 }
}
```

The agent asks once. Or pass `standard_for_unstated=true` for JLCPCB's standard: 1.6 mm, lead-free HASL, 1 oz outer, 0.5 oz inner, green, FR-4.

## 3. Delivery

Asked with the questions; optional. With a full address, checkout opens with delivery saved. Outside the US, country and city are enough to price (Canada and India also need province or postal code).

## 4. Price

USD, including shipping, duty and tax.

| Order | Time |
| - | - |
| Bare, from Gerbers | 5–10 s |
| Bare, from KiCad | 10–25 s |
| Assembled, all parts at JLCPCB | Seconds |
| Assembled, distributor parts | Up to \~2 min |

If the client times out, call `quote` again with the same arguments to get the same quote.

## 5. Checkout

The reply has a board image and a checkout link. Paying makes an account, or **Skip** makes one without a password. ProvenMetal then orders from JLCPCB and buys any missing parts.

## Returning customers

If details are saved, the quote says `saved_details: true` and the agent asks before buying.

<Steps>
  <Step title="Code">`saved_code` emails a 6-digit code.</Step>
  <Step title="Confirm">`saved_verify` shows the charge and ship-to.</Step>
  <Step title="Pay">`saved_pay` charges the saved card. A decline returns the checkout link.</Step>
</Steps>

## Custom quotes

`mode: "review"` returns `custom_quote_reasons` and a link to ProvenMetal's team. Typical causes: OSP, ENEPIG, immersion tin or silver; matte mask; impedance on your own stackup; blind or micro vias; rigid-flex; unmapped laminate; several boards in one outline; `special_requirements=true`.

If only assembly can't be priced, `fabrication_quote` gives an instant bare-board price.

## Advanced fabrication

`jlcpcb_capabilities` lists materials and JLCPCB's 35 services. Pass them in `jlc_options`, with `via_process`, `impedance_controlled` + `jlc_stackup`, and `inner_copper_oz`. What's priced is what's ordered.

## Limits

Per address, per hour: 20 quotes, 40 uploads, 120 design checks, 240 part checks. A refusal says how long to wait.

## Data

Uploads are kept 6 hours; stored copies are deleted after 8. JLCPCB receives the Gerbers to price them. ITAR designs are refused.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.