# Orders and tracking

> The stages an X3D order moves through, what each email tells you, pickup orders, order numbers, and what /orders shows: status, totals, tracking, search and PDF statements.

Source: https://x3dstudios.com/docs/studio/orders  ·  Updated: 2026-10-16

Every paid order moves through six stages, or five for an order you collect, and /orders is where you watch it. That page lists each order with its stage, date, total and tracking number, lets you search and filter by date, and builds a statement for any range that you can print or download as a PDF. This is what a customer sees; the machine-side view of a job at the farm is a separate thing.

## The six stages

An order record only exists once payment has been confirmed, and it is created at placed. Cancelled sits off the pipeline rather than at the end of it, so a cancelled order shows a plain statement instead of a progress bar that looks like it is still moving.

| Stage | What has happened | Emails you |
| --- | --- | --- |
| placed | Payment confirmed. Nothing is on a printer yet. | No — the checkout confirmation already covered it |
| queued | Your order is in the print queue on our farm. | Yes |
| printed | Your parts are off the printer and cooling. Packing is next. | Yes |
| packed | Boxed and waiting for the carrier pickup. | Yes |
| shipped | Handed to the carrier. This is where a tracking number appears. | Yes |
| delivered | The carrier reported the parcel as delivered. | Yes |
| cancelled | Cancelled; any payment taken is being refunded. | No |

> **Three guards on the stage email** — An email only goes out if the stage actually changed (a double-click or a retried form sends nothing), if the move was forward (a correction backwards is silent), and if the stage is one that emails by default. That is why you never get the same shipping notice twice.

Most stages are set by a person as the work happens: queued when your prints go into the farm's queue, packed when the box is closed, shipped when it is handed to the carrier. Two move by themselves. When your order's plates are printed from the farm's queue, the order moves to printed as soon as the last one finishes; a plate that fails holds the order back until its reprint is done. And delivered is set from the carrier, below.

### Orders you collect

An order arranged for pickup in Austin rather than posted runs placed, queued, printed and packed like any other, then ends at Picked up instead of shipped and delivered. Packed reads Ready for pickup, on /orders and in its email, which asks you to reply to arrange a time. /orders shows Pickup: you collect this order from us where an address would be. There is no carrier, no tracking number and no postage.

## What the stage emails say

- The subject names the stage and the order number, such as Your order is queued to print followed by the number, so a reply lands on the right order.
- A progress tracker in plain text, so it reads with images turned off, and a card showing the order: its number and date, each item with its material and colour by name, the postage, any Priority print, and the total paid. Money is shown per line only when the lines add up to the total exactly; otherwise the email lists what you ordered and the total paid.
- One line on what happens next. No email before shipped promises a tracking number or a date.
- On shipped: the address it is going to, the tracking number with its carrier, and a Track your parcel button when the carrier has a tracking page.
- On delivered, or Picked up for a collected order: a Leave a review link.
- A View your order link to /orders, or to /print/order/<code> for a print API order.
- Under Picked for you, two or three other things we make, such as a store product, the AI generator or gift cards, never something already in the order. Stop showing me recommendations at the foot removes them from every later email; the order updates themselves keep coming. A cancelled order's email has none.

## Delivered is set automatically

A nightly sweep asks the carrier about every order sitting at shipped that has both a tracking number and a carrier we can query. Only a delivered answer moves anything: the order advances to delivered and the delivery email goes out. Any other answer — still in transit, returned, or no answer at all — leaves the order where it is and is tried again the next night. A tracking number filed under the carrier Other is never queried, because there is no carrier account behind it. The sweep is also compare-and-set, so if an operator has already marked the order delivered by hand, no second email goes out.

## Reviews

- The delivered email, or Picked up for a collected order, carries a Leave a review link signed for that order, so a review can only come from the person we sent it to. If there is no review five days after delivery we send one reminder, and never a second.
- The form takes 1 to 5 stars, an optional headline of up to 90 characters, the review itself, between 10 and 2,000 characters, and the name to show, which is shortened to a first name and an initial. Your email address is never shown.
- One review per order: sending the form again from the same link edits the review you left rather than adding another.
- Reviews are published as written, on /reviews and, for a store product, on its product page. There is no approval queue; we may reply underneath.
- Separately, once an order has shipped at least ten days ago, a monthly email may ask you to rate us on Google. It is sent at most three times to anyone, ever, never within 25 days of the last, and carries a one-click unsubscribe.

## What /orders shows

- The order number, in mono, such as #2610014, however the order was placed: the cart, Print and Ship, a single store product, a payment link, or arranged with us directly. A number is only given once the payment goes through, so the numbers run without gaps. Orders placed before numbering keep their original id: CART- for a cart checkout, ORD- for a Print and Ship order, STORE- for a single store product.
- A status pill and the progress timeline underneath it.
- The date and time the order was placed, and the total charged. Orders placed since the price breakdown was recorded also list Items, Priority print when you chose it, Shipping (Express when you paid for it, Free when nothing was charged), any Discount or Gift card, and Tax, which reads None.
- For a print order: material, colour, quality, size and quantity (quantity only when it is more than one).
- For a cart order: a one-line item summary, such as 2x Desk Clock — PLA, Black; 1x Custom print.
- The delivery name, city, state and postcode. The street line is deliberately not printed on screen. An order you collect says Pickup instead.
- A tracking number, once one has been entered.
- Print API and /farm/submit orders placed under the same email, with their X3D- code and a Full status & details link to /print/order/<code>.
- A Payment History section listing Stripe charges on your account, each with a Receipt link whenever Stripe issued one.

> **Two things the page does not have** — The tracking number is plain text, not a link — the order list does not read the carrier the order was shipped with, and a guessed carrier link is worse than none. And there is no model-file download on /orders; the only outbound link is Stripe's receipt. Your files stay in the design studio, and the operator's copy of the order email carries the signed links to them.

Per-item prices are not shown on the order card either. What was actually charged per line is on the Stripe receipt; the order card shows the total and, on newer orders, the breakdown above.

## Search and date range

One search box and two date fields sit above the list. Every term you type has to match somewhere — searching black shipped means the black one that shipped, not everything black plus everything shipped. The fields searched are the order id, the account email, the item summary, material, colour, quality, status, tracking number, carrier, the full delivery address and the order date.

The From and To dates are both inclusive and compared in UTC, so an order placed at 18:33 UTC on 7 September is the 7th wherever you open the page. Filtering runs over the orders already loaded for your account, so it is a view rather than a query and can never reach anyone else's data.

## Statement and invoice

The Statement / invoice link exports exactly the range you have filtered to, defaulting to every order the account holds, website and print API orders together. It opens as a page with the issuer block, the email it is billed to, a Date / Order / Items / Amount table, and a total, with two buttons: Download PDF and Print.

- Cancelled, refunded, failed and voided orders are listed under Not charged rather than hidden, and are left out of the total.
- Anything else counts, including a status we add later — an unexpected line in the total is a visible error somebody queries, where one silently dropped is not.
- Totals are summed in cents, so a hundred orders cannot drift a penny.
- Download PDF builds the statement on the server as a real PDF, on the same letterhead as our quotes and invoices, named like X3D-Statement-20260901-20260930.pdf. Each line is one order's charged total with shipping inside it, so the PDF adds no tax row of its own, and its total is the same figure the page shows.
- Print uses the browser's own print dialog instead; the page hides the site chrome and sets a 16 mm margin for it.
- It is your statement only: it is built from the orders on the signed-in account and takes no account or order parameter, so it cannot be pointed at anyone else's.

## Looking an order up

`GET /api/orders`

Every order on the signed-in account, newest first.

Auth: session

No parameters, no body. It returns up to 50 website orders and up to 100 print API orders for the signed-in account, merged and sorted newest first. The website cap is applied by the database before that sort, so on an account holding more than 50 website orders you get 50 of them rather than reliably the 50 newest. Scoping is by the account email alone — there is no order-id or account parameter, so this route cannot be pointed at someone else's history. Signed out it answers 401.

`GET /api/order-status`

The stage and tracking number for one of your orders.

Auth: session

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `orderId` | string | yes | The order id as shown on /orders, for example 2610014, or an older id such as CART-8f1c…. It must belong to the signed-in account. |

**Read one order's stage**

```bash
# Runs in a signed-in browser session; pass your session cookie from a script.
curl "https://x3dstudios.com/api/order-status?orderId=2610014" \
  -H "Cookie: $X3D_SESSION_COOKIE"
```

The reply is a projection, not the whole record: orderId, status, description, trackingNumber (null when there is none), createdAt and updatedAt. No carrier, no total, no address. An order that does not exist and an order belonging to somebody else both answer 404, so the endpoint leaks nothing about which ids are real. It reads website orders only; a print API order is looked up at /print/order/<code>.

### Without signing in

There is one public lookup, and it covers orders placed through the print API or the no-code form at /farm/submit. Those carry a short code like X3D-K7M2QP, and /print/order/X3D-K7M2QP shows that order's progress to anyone holding the code — the code is the credential. It lists the file, material, colour, nozzle, layer height, quantity and total, plus carrier and tracking number as plain text, and offers a payment link when the order is still unpaid.

> **API orders on /orders** — Orders submitted through the print API, or through the form at /farm/submit which writes the same record, have their own finer status vocabulary — PENDING_PAYMENT, RECEIVED, ACCEPTED, PRINTING, PRINTED, SHIPPED, DELIVERED, CANCELLED, REJECTED. /orders lists them beside your website orders, rounded down onto the customer stages (ACCEPTED and PRINTING both read as queued, so nothing looks further along than it is), with a link to /print/order/<code> for the exact state.

[Poll an API order's status](https://x3dstudios.com/docs/api/order-status)

## If an order is not there

In rough order of likelihood:

1. You are signed in as a different account. An order is filed under the email on the checkout session, which is prefilled from the account that started it.
2. The account holds more than 50 orders. That is the cap on the list, and the search and date filters run over what has already been loaded rather than fetching more, so an older order cannot be filtered back into view. Ask us for it by order id.
3. It was placed through the print API or the form at /farm/submit under a different email from the one you are signed in with. Its own page at /print/order/<code> works without signing in.
4. The payment did not complete. An order record is only written once Stripe confirms the charge, so an abandoned checkout leaves nothing behind. Check Payment History on the same page: no charge means no order.
5. The payment went through but the order never appeared. That means the confirmation callback did not land. Send us the order id or the Stripe receipt and we will reconcile it by hand.

Reply to any order email, or use /contact. Quoting the order id or the tracking number gets to an answer fastest.

---

- [Checkout and payment](https://x3dstudios.com/docs/studio/checkout) — What happens between the cart and a paid order.
- [Shipping](https://x3dstudios.com/docs/studio/shipping) — Rates, carriers and where parcels go.
- [Account and billing](https://x3dstudios.com/docs/studio/account) — Plans, print credit and payment history.
- [Support](https://x3dstudios.com/docs/integrations/support) — Getting a person to look at an order.

## Frequently asked

**Can I track an order without signing in?**

Only an order submitted through the print API or the no-code form at /farm/submit — both write the same record. Those carry a code like X3D-K7M2QP and their status page is public. Cart, Print and Ship and store orders are tied to your account and need you signed in.

**Which order updates send an email?**

Every move forward emails you: queued, printed, packed, shipped and delivered, or for an order you collect, Ready for pickup and Picked up. Placed is the one exception, because the checkout confirmation already covered it. Moving an order back a stage to correct a mistake sends nothing.

**Why is the tracking number on /orders not clickable?**

The order list shows the number but does not read the carrier the order was shipped with, so it cannot build a tracking link it knows is right. The shipped email does carry the carrier name, and a working link for UPS, FedEx and USPS — a number filed under the carrier Other has no tracking site to point at, so it stays plain text there too.

**My order is not showing on /orders. What now?**

Check you are signed in with the same email the payment used, since an order is filed under the address on the checkout session; an order paid through a payment link is filed under the address we made the link for. The list shows up to 50 website orders per account. Orders submitted through the print API or the /farm/submit form appear there too when they were placed from an account with the same email, with a link to their full status page.

**When does my order get its number?**

When the payment goes through. Website orders are numbered like 2610019, year and month first, and only a paid order takes a number, so the numbers run without gaps. Orders from before numbering keep an id starting CART-, ORD- or STORE-, and print API orders keep a code like X3D-K7M2QP.

**Can I download a statement or invoice for my orders?**

Yes. Statement / invoice on /orders builds one statement for the date range you have filtered to, and Download PDF on that page gives you it as a PDF on X3D's own letterhead. It covers your website orders and your print API orders together.
