POST
/v1/quotes
Create Quote
Summary
Create a deterministic quote from a Gerber zip or DFM run
Description
Creates a quote from DFM analysis and pricing. Accepts dfm_run_id (preferred for audit), board_id, or file upload. When using dfm_run_id, pricing is locked to that specific DFM snapshot.
Request Example
# Quote from DFM run (preferred for audit)
curl -X POST "http://127.0.0.1:8000/api/v1/quotes" \
-H "Authorization: Bearer $ASAP_API_KEY" \
-F 'quote_request_json={"dfm_run_id":"dfm_...","quantity":10,"lead_time":"standard","build":{"type":"bare_pcb"},"ship_to":{"country":"US","postal_code":"94107","state":"CA"}}'
# Quote from board_id
curl -X POST "http://127.0.0.1:8000/api/v1/quotes" \
-H "Authorization: Bearer $ASAP_API_KEY" \
-F 'quote_request_json={"board_id":"brd_...","quantity":10,"lead_time":"standard","build":{"type":"bare_pcb"},"ship_to":{"country":"US","postal_code":"94107","state":"CA"}}'
# Quote with file upload
curl -X POST "http://127.0.0.1:8000/api/v1/quotes" \
-H "Authorization: Bearer $ASAP_API_KEY" \
-F "file=@board.zip" \
-F 'quote_request_json={"quantity":10,"lead_time":"standard","build":{"type":"bare_pcb"},"ship_to":{"country":"US","postal_code":"94107","state":"CA"}}'
Response Example
{
"request_id": "req_1234567890abcdef",
"quote_id": "quo_1234567890abcdef",
"status": "approved",
"board_id": "brd_1234567890abcdef",
"dfm_run_id": "dfm_1234567890abcdef",
"pricing": {
"currency": "USD",
"subtotal": 182.00,
"shipping": 24.00,
"tax": 0.00,
"total": 206.00,
"unit_price": 18.20
},
"lead_time": {
"option": "standard",
"estimated_ship_date": "2026-01-28",
"estimated_delivery_date": "2026-01-31"
},
"gates": {
"dfm": {"status": "pass"},
"policy": {"status": "pass", "violations": []}
},
"warnings": [],
"expires_at": "2026-01-26T11:00:00Z"
}
Error Codes
This endpoint may return the following error codes:
| Code | Status | Meaning |
|---|---|---|
missing_auth |
401 | No Authorization header provided |
invalid_api_key |
403 | API key is invalid or missing |
invalid_file |
400 | Uploaded file is not a .zip file |
empty_file |
400 | Uploaded file is empty |
invalid_quote_request |
400 | Bad JSON in quote_request_json |
board_not_found |
404 | board_id not found |
dfm_run_not_found |
404 | dfm_run_id not found |
missing_input |
400 | Provide dfm_run_id or board_id or file |
dfm_failed |
500 | DFM execution failed |
Authentication
This endpoint requires Bearer token authentication:
Authorization: Bearer YOUR_API_KEY