Documentation
Partner API

Quotes

Price a ready file in one material at one quantity before you order: how the price is made, tiers and discounts, the estimate, failure codes and materials.

Updated 2026-10-24MarkdownOpenAPI

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.

JSON
{
  "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

FieldMeaning
list_unit_priceThe per-part price at this quantity before your plan's discount, EUR, two decimals, as a string.
discount_pctYour plan's discount, as a string.
unit_pricelist_unit_price less the discount, rounded to the cent.
totalunit_price × quantity.
tiersUnit price at other quantities — the ladder your shop can show.
estimateWhat 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.warningsWhat 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:

CodeWhat happenedNext step
model_too_largeThe 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_modelThe file holds no printable geometry.Export the part again from your CAD or slicer.
material_unavailableThe material is outside your plan or out of stock for this run.Pick one from GET /v1/materials.
slicer_rejectedThe slicer refused the geometry.Check for open meshes, inverted normals and zero-thickness walls, or send it to us.
file_unavailableThe 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.

We value your privacy

We use cookies for analytics and advertising to improve your experience and measure our marketing. See our Privacy Policy.