X3DStudios

Capacity and lead times

How long a part actually takes: queue time, print time by part size, dispatch and transit, plus the public capacity endpoint that publishes live fleet numbers.

This page tells you what your part is actually waiting on, and how to look up the current number instead of trusting a printed one. Two clocks run in sequence: farm time, which is queue plus print plus handling, and transit, which belongs to the carrier. They are quoted separately everywhere on this page because they behave completely differently.

The three things you wait on#

StageWhat it isWhat changes it
QueueJobs already queued, ready or mid-print that owe printer time before yours startsHow busy the farm is when you order. Published live as general.backlogDays.
PrintYour own plate on a machineWeight, layer height, colour count and quantity. See the table further down.
DispatchCooldown, removal, a person looking at the part, packing, and the label runOne handling day is built into every quote.
TransitThe carrier moving the parcelDistance and service. Not included in any farm lead time.
Print time is not shipping time
Every lead time on this page and on /farm ends at the moment the parcel is handed to the carrier. Nothing in the system predicts how long the carrier then takes. Add transit yourself.

Look up the current number#

The farm publishes its own capacity. It is a public endpoint with no key and no account, because it exposes counts only, never printer IDs or job names. It is the same data the panel on /farm renders.

GET/api/farm/capacityNo auth

Live fleet counts, measured throughput and queue depth. No parameters.

curl https://x3dstudios.com/api/farm/capacity
200 response
{
  "generatedAt": "2026-09-09T14:02:11.418Z",
  "fleet": {
    "total": 3,
    "general": 3,
    "generalProductive": 3,
    "reservedOperator": 1,
    "reservedCustomer": 0,
    "available": 1,
    "printing": 2,
    "offline": 0,
    "maintenance": 0
  },
  "rates": {
    "gramsPerOrder": 100,
    "gramsPerHour": 24.6,
    "measured": true,
    "hoursPerDay": 22,
    "hoursPerOrder": 4.27,
    "handlingDays": 1
  },
  "general": {
    "printers": 3,
    "ordersPerDay": 15.5,
    "gramsPerDay": 1624,
    "backlogOrders": 4.2,
    "backlogDays": 0.26
  },
  "reserved": {
    "printers": 1,
    "ordersPerDay": 5.2,
    "gramsPerDay": 541
  }
}
FieldMeaning
fleet.totalEvery printer on record, whatever its state.
fleet.generalProductivePrinters that can take work today: not offline, not in maintenance, not held by a customer reservation.
fleet.reservedOperatorMachines the farm has reserved as its own dedicated capacity. Still counted in the order lane.
fleet.reservedCustomerMachines a customer holds. Carved out of order capacity entirely.
rates.gramsPerHourThroughput per printer. The median of the last 200 completed jobs when there is history.
rates.measuredfalse means the 22 g/h fallback was used because there were fewer than five usable completed jobs.
rates.hoursPerOrderHours one 100 g order occupies, including 12 minutes of changeover.
general.backlogOrdersQueue ahead of you, expressed in 100 g orders.
general.backlogDaysThe same queue expressed in days at the current fleet rate.
Responses carry Cache-Control: public, max-age=60, s-maxage=60, stale-while-revalidate=300. A failure returns 503 with the body {"error": "Capacity unavailable."}

How the lead time is worked out#

The arithmetic is deliberately simple and entirely visible. One order means 100 grams by default; the panel on /farm lets you change that and re-quote.

The whole model
hoursPerOrder = gramsPerOrder / gramsPerHour + 12 minutes changeover
ordersPerDay  = productivePrinters * 22 productive hours / hoursPerOrder

printDays     = orders / ordersPerDay
totalDays     = printDays + backlogDays + 1 handling day
quotedDays    = max(1, ceil(totalDays))
  • 22 productive hours per printer per day, not 24. The rest is changeover and maintenance headroom.
  • 12 minutes of changeover per job for clearing the bed and restarting.
  • One handling day covers cooldown, removal, the look-over, packing and the label run.
  • Throughput is measured where possible: completed jobs are turned into grams-per-hour rates, rows shorter than 300 seconds or outside 1 to 120 g/h are discarded as bad headers, and the median of at least five survivors becomes the rate.
  • A job already printing only owes the remainder of its grams to the backlog, scaled by its progress.
  • A lane with no productive printers or no throughput returns stalled rather than a number, which the panel shows as Ask the operator.
Calendar days, not business days
The ship date is today plus whole calendar days. There is no weekend or holiday logic anywhere in the calculation, and a re-run after a failed plate is not in it either. Treat a quoted date as the earliest plausible one.

What makes a print long#

Print time tracks material laid down and layers climbed, not the size of the bounding box. These are the levers you actually control at /print.

LeverEffect on timeEffect on price
WeightRoughly linear. At the farm's fallback rate of 22 g/h, a 100 g part is about 4.5 hours of machine time.Linear. You are charged per gram, rounded up to the whole gram.
Layer heightPremium 0.1mm layers take roughly twice as long as standard 0.2mm, because there are twice as many of them.1.75x the per-gram rate. Standard 0.2mm is 1x.
Height in ZA tall thin part is slow for its weight: every layer costs a pass whether it is 5mm wide or 200mm.No direct effect. Price is weight, not height.
InfillHigher infill is more extrusion and more time. Default is 20%.Higher, through weight.
ColoursEach colour change is a purge and a tool change, and a four-colour plate can spend most of its run swapping - but only on a plate you sliced yourself, because a model we slice is cut as one colour.Nothing on a model we slice for you: colour overhead is switched off, so the plate is cut and quoted as a single colour. An already-sliced file sent through the print API is charged for the hours its weight cannot explain, as machine time at $1.50/hour.
QuantityLinear in printer hours, but parallel across free machines.5% off at 5 or more units, 10% off at 10 or more.
The cheapest way to shorten a print
Drop from premium 0.1mm to standard 0.2mm layers. It roughly halves the print and takes the per-gram rate from 1.75x back to 1x. Reserve 0.1mm for parts where the layer lines are the point.

One thing that is never estimated: a file you sliced yourself. If you send a .gcode or .gcode.3mf to the print API, its measured grams and hours are used exactly as they are, and no estimated colour overhead is added on top, because your slicer already counted every purge. The hours themselves still count: any beyond what a normal print of that weight would take are billed as machine time at $1.50/hour, which is what makes a self-sliced four-colour plate expensive.

Dispatch, and then transit#

Once the part is cool it comes off the plate, a person looks at it, and it is boxed. Every print goes out in the same parcel: a 6 x 6 x 6 inch box booked at 1 lb, because a house standard beats a per-order guess and the carrier re-rates on real weight anyway. Labels are bought in a batch, so an order finished just after a label run waits for the next one.

DestinationPostageFree over
United States$7 flat$50
International, 22 countries$30 flat$500
One rate per destination. Checkout does not offer a choice of service levels.
  • The carrier is recorded when the order is marked shipped, and the shipped email names it and links the tracking number.
  • On /orders the tracking number appears as plain text without a carrier link. The email is the clickable copy.
  • Delivered is set automatically. A daily sweep asks the carrier about every shipped order that has a tracking number and a known carrier, and marks it delivered when the carrier says so. An order whose carrier was recorded as Other is never queried, because there is no carrier to ask.
  • Duties and import taxes on international parcels are yours.

If you have a hard deadline#

There is no rush product. Checkout has one shipping rate and the queue has no priority lane, so paying more does not move you up it. What you can do instead:

  1. 1
    Check the queue before you order

    Call the capacity endpoint and read general.backlogDays. That is the wait in front of you today, and it is the number that moves most.

    bash
    curl -s https://x3dstudios.com/api/farm/capacity | grep -o '"backlogDays":[0-9.]*'
  2. 2
    Say the date out loud

    Email [email protected] with your order number, or the model and material if you have not ordered yet, and the date you need it by. The operator can tell you whether it is achievable and will say if it is not. There is no automated promise behind this; a person answers.

  3. 3
    Cut the print, not the queue

    Standard 0.2mm layers instead of premium, one colour instead of four, and 20% infill instead of solid all shorten the machine time you are waiting on.

  4. 4
    Reserve a machine for repeat work

    If you need capacity you control rather than a place in the shared queue, book a printer by the hour or the day. A customer-held machine is carved out of the order lane entirely, so nobody else's queue is in front of you. See /docs/farm/reservations.

Next#