A quote prices one ready file in one material at one quantity, without creating an order. Use it to show a price in your own shop, to compare materials or to check a design before you commit.
How a price is made
The file is sliced for real on our quoting profile for the material, with our house settings; a 3MF keeps the settings it was saved with. From the slice we take the weight and the print time, and the per-part price follows — the same price the calculator shows. Quantities are priced on full plates, then one partial plate; the unit price is rounded to the cent before it is multiplied.
Quantity tiers and your discount
The published quantity tiers apply automatically — 100+ of the same file carries 10 percent off the unit price, 250+ carries 20 percent. Your plan's discount_pct applies on top of the list price; a contract can set a different one. tiers on a priced quote lists the unit price at other quantities so your shop can show the ladder.
Create a quote
curl -X POST "https://engine.layercrew.com/v1/quotes" \
-H "Authorization: Bearer $LAYERCREW_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "file_id": "4f1b2c3d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "material": "PLA", "nozzle": "0.4", "quantity": 2 }'Pricing takes seconds to a few minutes. Poll GET /v1/quotes/{id} until status is priced or failed, or listen for quote.priced and quote.failed on your webhook.
{
"data": {
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"file_id": "4f1b2c3d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"material": "PLA",
"nozzle": "0.4",
"quantity": 2,
"status": "priced",
"list_unit_price": "12.40",
"discount_pct": "0",
"unit_price": "12.40",
"total": "24.80",
"currency": "EUR",
"tiers": [
{
"min_quantity": 1,
"unit_price": "12.40"
},
{
"min_quantity": 100,
"unit_price": "11.16"
},
{
"min_quantity": 250,
"unit_price": "9.92"
}
],
"estimate": {
"weight_grams": 31.2,
"time_seconds": 5400,
"unit_yield": 1,
"printer_model": "Bambu Lab A2L",
"nozzle": "0.4",
"material": "PLA",
"infill_pct": 15,
"wall_loops": 3,
"support": "auto",
"warnings": [],
"priced_at": "2026-10-24T09:34:12Z"
},
"created_at": "2026-10-24T09:33:00Z",
"priced_at": "2026-10-24T09:34:12Z"
}
}GET /v1/quotes/{id} — priced
What the quote carries
| Field | Meaning |
|---|---|
list_unit_price | The per-part price at this quantity before your plan's discount, EUR, two decimals, as a string. |
discount_pct | Your plan's discount, as a string. |
unit_price | list_unit_price less the discount, rounded to the cent. |
total | unit_price × quantity. |
tiers | Unit price at other quantities — the ladder your shop can show. |
estimate | What the slicer measured and used: weight_grams, time_seconds, unit_yield (parts per plate in a 3MF), printer_model, nozzle, material, infill_pct, wall_loops, support, warnings. |
estimate.warnings | What the design-for-manufacturing pass flagged — thin walls, steep overhangs, a part laid out close to the bed's edge. Worth showing to whoever drew the part. |
When pricing fails
status becomes failed, quote.failed is emitted, and failure_code with failure_message say what to do:
| Code | What happened | Next step |
|---|---|---|
model_too_large | The part is laid out larger than our print bed. | Split it into sub-assemblies, or send it through contact us and we take it by hand. |
not_a_model | The file holds no printable geometry. | Export the part again from your CAD or slicer. |
material_unavailable | The material is outside your plan or out of stock for this run. | Pick one from GET /v1/materials. |
slicer_rejected | The slicer refused the geometry. | Check for open meshes, inverted normals and zero-thickness walls, or send it to us. |
file_unavailable | The file was deleted or purged before pricing ran. | Upload it again. |
Quotes and orders
A quote is information, never a commitment. The price on an order is computed again when the order is created and frozen when an engineer accepts it; the same file, material and quantity on the same day give the same number. Your plan's quote_daily_cap, when set, bounds the quotes you may create in a day; GET /v1/account shows usage.quotes_today.
Materials
GET /v1/materials lists what you can order: each material with its nozzles and colours (id, name, hex, in_stock), filtered by your plan's allowed_materials and allowed_nozzles. in_stock is live and never a promise. A colour left out of an item lets the engineer pick at production.
curl "https://engine.layercrew.com/v1/materials" \
-H "Authorization: Bearer $LAYERCREW_API_KEY"Every endpoint is in the reference.