FabTally

One HTTP call puts your model through a real slicer.

Plan view of one layer of the 20 mm sample cube: two perimeter loops and 15% zig-zag infill20.00Front view of the 20 mm sample cube: 100 layers of 0.20 mm on the bed, with a 0.40 mm nozzlelayer 100 / 100⌀0.400.2020.00
Partsample-cube-20mm.stl
PrinterBambu Lab A1
MaterialPLA
Layer0.20 mm
Time11m 4s
Filament3.64 g · 1.21 m
Price$5.00
Rev0.2
Quoted by the live API, 2026-10-20.

FabTally returns print time, filament in grams and metres, layer count, dimensions, a fits-on-bed check and a price. A production slicer does the slicing against 13 calibrated printer profiles and 12 materials, so the numbers are the ones a printer would produce, not an estimate from volume.

Free for people through the MCP server and this page. Agents pay per call in USDC on Base, or with prepaid credits.

Live quote

Quote a part against the live API

Load an STL, OBJ, 3MF or PLY, pick a printer and a material, and the public quote endpoint slices it. The readout is the response, not a preview.

QuotePOST /api/quote/v1/quote
Drop an STL, OBJ, 3MF or PLY here, or choose a file
up to 64 MB · sliced in memory and deleted when the response is sent
download sample-cube-20mm.stl

The live quote needs JavaScript; the curl request below works without it.

Part
Printer
Material
Qty
USD · total
Print time
Filament
Layers
Dimensions
Volume
Mesh
Settings

Load a part and press Quote. The numbers are measured by the slicer, not estimated.

This endpoint is public and rate-limited. Production and volume traffic uses the REST or agent lanes below.

Request and response

The request, and what comes back

One multipart POST with the file, a printer id and a material id. The response is JSON you can price from, with every measured field marked exact or heuristic.

Request
curl -X POST \
  https://fabtally.com/api/quote/v1/quote \
  -F file=@part.stl \
  -F material=pla \
  -F printer=bambu-a1 \
  -F quantity=1
Response
{
  "model": "sample-cube-20mm.stl",
  "printer": "bambu-a1",
  "material": "pla",
  "settings": { "layer_height_mm": 0.2, "infill_percent": 15,
                "wall_loops": 2, "supports": "none" },
  "print_time_sec": 664,
  "print_time_human": "11m 4s",
  "filament_g": 3.64,
  "filament_m": 1.2112,
  "layer_count": 100,
  "model_stats": {
    "dimensions_mm": { "x": 20.0, "y": 20.0, "z": 20.0 },
    "volume_cm3": 8.0, "volume_method": "exact",
    "triangles": 12, "watertight": true, "fits_on_bed": true
  },
  "quote": {
    "currency": "USD",
    "unit": { "material_cost": 0.09, "machine_cost": 0.37,
              "setup_share": 1.5, "price": 5.0 },
    "minimum_price_applied": true,
    "total": 5.0
  }
}

Recorded 2026-10-20 from the live endpoint. Trimmed; no value edited. The full response also carries breakdown_per_unit and pricing_basis, which echoes whether each cost input was your own or a default.

Fields in the response
FieldUnitBasisNote
print_time_secsexactFrom the slice.
filament_g, filament_mg, mexactFrom the slice.
layer_countcountexactFrom the slice.
model_stats.dimensions_mmmmexactBounding box of the mesh.
model_stats.volume_cm3cm³exactvolume_method says how it was measured.
model_stats.triangles, watertightcount, boolexactMesh checks.
model_stats.fits_on_bedboolexactAgainst the printer's bed.
quote.totalUSDcomputedFrom your material_cost_per_kg, machine_rate_per_hour, setup_fee, margin, markup_percent, minimum_price and currency if you pass them, defaults otherwise; see pricing_basis. The setup fee and the minimum price apply once per job; total is unit.price × quantity.

Models are streamed to the slicer and deleted when the response is sent; nothing is kept and nothing is trained on.

Fleet

Thirteen printers, drawn to scale

Each is a calibrated machine profile with its bed size and a 0.4 mm nozzle. Pass the id; fits-on-bed is checked against these dimensions.

Elegoo Neptune 4 Maxelegoo-neptune4-max420 × 420 × 480 mm · ⌀0.40
Voron 2.4 350voron-24-350350 × 350 × 325 mm · ⌀0.40
Creality K1 Maxcreality-k1-max300 × 300 × 300 mm · ⌀0.40
Elegoo Centauri Carbonelegoo-centauri-carbon256 × 256 × 257 mm · ⌀0.40
Bambu Lab A1bambu-a1256 × 256 × 256 mm · ⌀0.40
Bambu Lab P1Sbambu-p1s256 × 256 × 250 mm · ⌀0.40
Bambu Lab X1 Carbonbambu-x1c256 × 256 × 250 mm · ⌀0.40
Prusa MK4prusa-mk4250 × 210 × 220 mm · ⌀0.40
Creality Ender-3 V3ender3-v3220 × 220 × 250 mm · ⌀0.40
Creality K1creality-k1220 × 220 × 250 mm · ⌀0.40
Anycubic Kobra 2anycubic-kobra2220 × 220 × 250 mm · ⌀0.40
Bambu Lab A1 minibambu-a1-mini180 × 180 × 180 mm · ⌀0.40
Prusa MINIprusa-mini180 × 180 × 180 mm · ⌀0.40

Materialspla, pla-cf, petg, petg-cf, abs, abs-cf, asa, asa-cf, pet, tpu, pc, nylon

Quality presetsdraft 0.28 mm · standard 0.20 mm · fine 0.12 mm

For agents

Agents pay per call and settle in USDC on Base

An unpaid request to any /agent/v1/* endpoint returns HTTP 402 with the price, the asset and the pay-to address, per the x402 protocol (v2, scheme exact, network eip155:8453). Pay, repeat the request, and it settles and returns the result. Slicing runs after payment settles, so malformed input is never charged.

The 402 handshake

  1. 1

    Request without payment

    POST /agent/v1/quote → 402 Payment Required
  2. 2

    The 402 body states the terms

    accepts[0]: scheme exact · network eip155:8453 · asset USDC · amount 5000 (= $0.005) · payTo 0xccB5…90e3
  3. 3

    Repeat with the payment header

    POST /agent/v1/quote + X-PAYMENT → 200, JSON as above

Settlement goes through the facilitator at https://facilitator.payai.network. The same terms are published at /.well-known/x402.

Price schedule

Fixed USDC per successful call. Prepaid credits are drawn down at the same prices.
MethodPathReturnsPrice
Geometry and quote
POST/agent/v1/analyzeGeometry only: bbox mm, volume cm³, triangles, watertight. No slice.$0.002
POST/agent/v1/quotePriced quote: print time, filament grams, dimensions, total.$0.005
POST/agent/v1/previewBase64 PNG render of the model. No slice.$0.005
Slice
POST/agent/v1/sliceFull slice metrics, geometry and fits-on-bed.$0.005
POST/agent/v1/slice/previewSlice metrics plus a rendered PNG.$0.010
POST/agent/v1/slice/gcodeSlice metrics plus downloadable G-code.$0.015
POST/agent/v1/slice/fullEverything: metrics, preview PNG and G-code.$0.020
DFM and attestation
POST/agent/v1/dfmPrintability report: verdict, wall thickness, overhangs, support and material deltas.$0.010
POST/agent/v1/orientOrientation optimiser: slices up to 4 candidates, recommends the one with least support.$0.020
POST/agent/v1/attestSigned point-in-time observation of a public URL (ed25519).$0.010
Free
POST/agent/v1/dfm-previewGeometry-only DFM preview: the printable-so-far verdict, at no charge.free

Discovery

Documents an agent reads to find and call FabTally.
PathWhat it isLink
/openapi.jsonOpenAPI 3.1, all operationsopen
/agent/overviewCapabilities and prices, JSONopen
/.well-known/x402x402 discovery documentopen
/.well-known/agent-card.jsonA2A agent cardopen
/.well-known/ai-catalog.jsonARD catalogopen
/agent/v1/attest/schemaAttestation schema and ed25519 public keyopen

Add the slicer to Claude, ChatGPT or Cursor

FabTally is listed in the MCP registry as com.fabtally/slicer, a hosted streamable-HTTP server at https://fabtally.com/mcp. Point any MCP client at that URL.

list_printers, get_print_quote, slice_model, check_printability, optimize_orientation, compare_printers, recommend_material, recommend_settings, whatif_infill, scale_advisor, validate_model, cost_breakdown, analyze_3d_model

Personal and interactive use through MCP is free within fair-use daily limits: slice metrics, the full printability report, orientation and the advisors. Only the downloadable G-code file is paid. Paste a link (GitHub, Google Drive, Dropbox, a direct STL/3MF or a zip; model-sharing sites usually block server downloads) or upload a file at fabtally.com/upload.

Claude Code
claude mcp add --transport http fabtally https://fabtally.com/mcp
DFM preview, sample cubePOST /agent/v1/dfm-preview
{
  "printable": "yes",
  "manifold": { "basis": "exact", "watertight": true },
  "overhangs": { "basis": "heuristic", "confidence": "medium",
                 "overhang_area_fraction": 0, "supports_suggested": false },
  "min_feature": { "basis": "heuristic", "min_thickness_mm": 19.999,
                   "thin_wall_risk": "none" }
}

Every DFM field says whether it came from geometry, a heuristic or a slice. Recorded 2026-10-20 for bambu-a1 and pla; trimmed.

Prices

What is free and what costs money

People, free

Using FabTally yourself, through the MCP server in Claude or ChatGPT Desktop or through the quote form on this page, costs nothing within fair-use daily limits. That includes slice metrics (time, filament, layers, cost), the full printability report, orientation optimisation and the printer, material and settings advisors. The only paid output for a person is the downloadable G-code file.

Agents and volume, per call

Agents, stores, MES integrations and high-volume callers use the /agent/v1/* lane at the prices in the schedule above, paid per call in USDC on Base or drawn from prepaid credits.

Prepaid credits, paid by card

Packs of $5, $10 and $25. Stripe checkout issues an API key on the next page; calls draw the balance down at the same per-call prices.

Buy credits with a card

Building a store or MES on the REST API? Human and developer pricing is separate: write to hello@fabtally.com (subject "FabTally REST API") or read the OpenAPI spec.