# 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.

Source: https://x3dstudios.com/docs/farm/capacity  ·  Updated: 2026-10-21

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

| Stage | What it is | What changes it |
| --- | --- | --- |
| Queue | Jobs already queued, ready or mid-print that owe printer time before yours starts | How busy the farm is when you order. Published live as general.backlogDays. |
| Print | Your own plate on a machine | Weight, layer height, colour count and quantity. See the table further down. |
| Dispatch | Cooldown, removal, a person looking at the part, packing, and the label run | One handling day is built into every quote. |
| Transit | The carrier moving the parcel | Distance 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/capacity`

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

Auth: public

**curl**

```bash
curl https://x3dstudios.com/api/farm/capacity
```

**Node**

```javascript
const cap = await fetch("https://x3dstudios.com/api/farm/capacity").then((r) => r.json());

// Days of queue already ahead of a new order
console.log(cap.general.backlogDays);

// Orders per day the fleet can turn out at 100 g per order
console.log(cap.general.ordersPerDay);

// true when the rate was measured from completed jobs, not assumed
console.log(cap.rates.measured);
```

**Python**

```python
import requests

cap = requests.get("https://x3dstudios.com/api/farm/capacity").json()
print(cap["fleet"]["total"], "printers")
print(cap["general"]["backlogOrders"], "orders in the queue")
```

**200 response**

```json
{
  "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
  },
  "colourSlots": 4,
  "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
  }
}
```

| Field | Meaning |
| --- | --- |
| fleet.total | Every printer on record, whatever its state. |
| fleet.generalProductive | Printers that can take work today: not offline, not in maintenance, not held by a customer reservation. |
| fleet.reservedOperator | Machines the farm has reserved as its own dedicated capacity. Still counted in the order lane. |
| fleet.reservedCustomer | Machines a customer holds. Carved out of order capacity entirely. |
| colourSlots | The most filaments any one printer has loaded right now, which is the most colours one plate can print in today. 0 when no printer has reported its AMS. A plate with more colours than this waits until a printer has them loaded, so it can take longer than the lead time. |
| rates.gramsPerHour | Throughput per printer. The median of the last 200 completed jobs when there is history. |
| rates.measured | false means the 22 g/h fallback was used because there were fewer than five usable completed jobs. |
| rates.hoursPerOrder | Hours one 100 g order occupies, including 12 minutes of changeover. |
| general.backlogOrders | Queue ahead of you, expressed in 100 g orders. |
| general.backlogDays | The 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**

```text
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.

| Lever | Effect on time | Effect on price |
| --- | --- | --- |
| Weight | Roughly 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 height | Premium 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 Z | A 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. |
| Infill | Higher infill is more extrusion and more time. Default is 20%. | Higher, through weight. |
| Colours | Each colour change is a purge and a tool change, and a four-colour plate can spend most of its run swapping. A multi-plate colour project is one job per plate. | Through the slice: a colour print is priced from a real slice of it in its colours, so the purge and change time are in its grams and hours. Five to eight colours adds a $25 second-AMS fee once per order line. An already-sliced file sent through the print API is also charged for the hours its weight cannot explain, as machine time at $1.50/hour. |
| Quantity | Linear 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.

| Destination | Postage | Free over |
| --- | --- | --- |
| United States | $7 flat | $49.50 |
| International, 23 countries | $30 flat | $500 |

*Flat rates. In the US you choose standard ($7, free over $49.50 in the cart) or express ($15, never free); international is one standard service.*

- 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

Priority print ($5 at checkout) puts your order at the front of the print queue and ships it in 1–2 business days instead of 4–5; express postage ($15) then shortens the transit to 2–3 business days. Every order carries a ship-by day, and the print queue lists priority jobs first, then the soonest ship-by, so the order promised first is printed first. Orders through the print API or the MCP server cannot buy Priority print yet and queue as Normal print. If you need it sooner than that:

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. **Say the date out loud** — Email contact@x3dstudios.com 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. **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. **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

- [Bulk and production runs](https://x3dstudios.com/docs/farm/bulk) — Quantity pricing, how large batches are split across machines, and what to send.
- [Reservations](https://x3dstudios.com/docs/farm/reservations) — Machine time by the hour or the day, and what it costs.
- [Orders and tracking](https://x3dstudios.com/docs/studio/orders) — The five order stages, which ones email you, and where the tracking number appears.
- [The print farm](https://x3dstudios.com/docs/farm/overview) — The machines, the build volumes, and who decides which one runs your part.

## Frequently asked

**How long will my order take?**

Two clocks, not one. Print time is queue depth plus your own print plus one handling day, and the live figure is published at https://x3dstudios.com/api/farm/capacity. Transit is on top of that and belongs to the carrier. A single small part with a clear queue is usually a day or two of farm time. What checkout states is the print speed you choose there: Normal print ships in 4–5 business days, Priority print in 1–2.

**Is there a rush or expedited option?**

Yes, on both halves. Priority print is $5 at checkout: your order is printed first and ships in 1–2 business days instead of 4–5. Express postage is $15 and moves the parcel in 2–3 business days instead of 4–6. Together, a priority print sent express arrives in about 3–5 business days. Both are chosen at checkout, beside each other, on /print, in the design studio and in the cart. Priority print is not offered through the print API or the MCP server yet, so an order placed there is queued as Normal print; express postage is available on the print API. If you have a hard deadline tighter than that, email contact@x3dstudios.com before you order so the operator can tell you whether it is achievable.

**Where do your lead-time numbers come from?**

Measured throughput, not a marketing figure. The median grams-per-hour of the last 200 completed jobs becomes the rate, once at least five of them pass sanity filters. With no usable history the fallback is 22 g/h, and the response tells you which was used in rates.measured.

**Do your lead times account for weekends?**

No. The ship date adds whole calendar days and has no weekend or holiday logic, so a quote that lands on a Sunday is a Sunday. Treat it as a floor, not a promise.
