X3DStudios

Shipping

What postage costs, where we ship, which carriers carry your parcel, how the tracking number reaches you, and what to do when one arrives damaged.

Everything ships from Austin, Texas. Postage is a flat rate that depends only on the destination and the order value: $7 in the US, $30 international, free above a threshold. This page covers what you pay, where we ship, when a parcel actually leaves the building, how the tracking number reaches you, and who to contact when one goes wrong.

What postage costs#

DestinationFlat rateFree atCheckout
United States$7.00$50.00 and upCart, print API
International$30.00$500.00 and upCart in international mode, print API
One definition drives the quote and the charge, so the cart total and the Stripe total cannot drift apart.

Postage is charged as its own line item called Standard Shipping or International Shipping, described as "Free on orders $50+" — the description quotes whichever threshold applies to that destination, so the international line reads "$500+". It is a line item rather than a Stripe shipping option on purpose: a gift card can settle a line item, so a card that covers the whole order covers the postage too. An empty basket ships for nothing rather than showing a total made entirely of postage. One route adds no such line at all: Buy Now on a single store product opens a checkout containing only the product, so that item ships free whatever it costs. Put the same product in the cart and the flat rate applies to the basket.

The instant quote on /print already includes $7
The quote panel on /print shows Shipping as its own line at the flat $7 and folds it into the total, with no free threshold applied — that is what Print & Ship charges. Add the file to the cart instead and the item price excludes postage, so the cart charges it once for the whole basket and the free-over-$50 threshold can apply. Ordering several files together is cheaper for exactly that reason.

Two discounts touch a shipped order, and they treat the postage differently. The first-order discount is 10% computed from the goods only, applied as a fixed amount off, so it never eats into the postage line. A Pro Studio plan takes 10% off a Print & Ship order at /print, and that one is computed from the whole quoted total — the $7 postage included — so it does come off the parcel as well as the print. Bulk pricing at 5 and 10 units is applied to the print itself, before postage is added. See /docs/pricing for the print side.

Where we ship#

The country list is not the same on all three checkouts, because each was built for a different thing. Anything outside the list for the route you are using is refused before payment.

CheckoutCountries accepted
Cart, domestic modeUS
Cart, international modeCA, GB, AU, DE, FR, IN, IE, NZ, NL, ES, IT, SE, NO, DK, FI, CH, AT, BE, PT, SG, JP, AE
Single store productUS, CA, GB, AU, DE, FR, IN
Print API orderUS, CA, GB, AU, DE, FR, IN, NL, IE, NZ, SE, IT, ES, MX

A print API order to a country outside that list is rejected at submission with "We don't currently ship to XX." rather than taken and then cancelled. Duties, VAT and customs handling are not collected at checkout and are the recipient's to pay on arrival.

Nothing is dispatched until the print is finished, so the date a parcel leaves depends on the queue, not on when you paid. A normal single order is printed and packed within about 24 to 48 hours; a large batch depends on live farm capacity, which /farm computes from current fleet availability and queue depth. Transit is the carrier's clock and only starts after that.

StageWhere your order physically isEmails you
placedPaid and in the print queue. Nothing has been made yet.No — the checkout confirmation covered it
printedOff the printer and cooling.Yes
packedBoxed, waiting for the carrier pickup.No
shippedHanded to the carrier. Tracking number appears here.Yes
deliveredThe carrier reported it as delivered.Yes
There is one shipping speed
Checkout offers a single postage line. There is no expedited option, no guaranteed delivery date, and no way to pay for a faster service at the till. If a deadline matters, email [email protected] before you order and we will tell you whether it is possible.

There is no automatic rate shopping on a web order. The carrier is chosen by hand in the operator console at the moment the order is marked shipped, in the same step that captures the tracking number. Four carrier values exist on an order, and only three of them can produce a link.

CarrierLink in the shipped emailNumber looks like
UPSYes — ups.com tracking1Z999AA10123456784
FedExYes — fedex.com tracking123456789012
USPSYes — tools.usps.com tracking9400111899223197428490
OtherNo — there is no site we can send you to with confidenceA reference number

Tracking numbers are normalized before they are stored and linked: spaces and dashes are stripped and the number is uppercased, so a number copied off a label with its printed spacing still resolves. The format is checked when it is entered, but that check is advisory and never blocks a send — carriers add formats faster than a pattern gets updated, and refusing a real number would be worse than passing on an unverified one.

How the tracking number reaches you#

  1. 1
    The shipped email

    Subject "Your order is on its way" followed by the order id. It names the carrier and hyperlinks the number to that carrier's tracking page. This is the only place the number arrives clickable.

  2. 2
    The orders page

    /orders shows the number as plain text under the order. That page holds the number but not the carrier, so it cannot build a link it knows is right — copy the number into the carrier's site, or use the link in the email.

  3. 3
    The order status endpoint

    Signed in, you can read the number back for one of your own orders. The response carries the tracking number but not the carrier.

GET/api/order-status?orderId=ORD-…Signed in

Status, description and tracking number for one of your own orders.

Query parameters
orderIdstringrequired
The order id from your confirmation email — CART-…, ORD-… or STORE-…. An order belonging to another account returns 404, the same as one that does not exist.
200 response
{
  "orderId": "CART-8f2c1d90-4a77-4a2e-9a1f-2b0f0c5f6d31",
  "status": "shipped",
  "description": "2 item(s)",
  "trackingNumber": "1Z999AA10123456784",
  "createdAt": "2026-09-01T18:33:00.000Z",
  "updatedAt": "2026-09-04T11:02:11.412Z"
}

That endpoint is authenticated by the browser session, not by an API key, so call it from the site while signed in. Orders placed through the developer print API are a separate system with their own public status page at /print/order/<code> and their own endpoint — see /docs/api/order-status.

Delivered is set by a nightly check#

Once a parcel is on a truck nobody here learns anything new about it, so a job runs daily and asks the carrier instead. It looks at orders that are shipped, have a tracking number, and have a carrier of UPS, FedEx or USPS. When the carrier reports the parcel delivered, the order moves to delivered and the delivery email goes out once. Orders whose carrier is Other are skipped — there is no carrier to ask. If a carrier is unreachable that night the order stays shipped and is retried the next day, so a stale shipped status is normal for a day and not a lost parcel.

Damaged, lost, or the wrong address#

There is no self-serve returns flow. All four of these are a person at [email protected], and replying to any email about the order works too, since the order id is in every subject line.

  • Arrived damaged: email us with the order id and photos of both the outer box and the parts, before the packaging goes in the bin. The state of the box is what tells us whether it was the carrier or the packing.
  • Tracking has not moved in days: that is normally a carrier-side problem. Send the order id and we will open it with the carrier rather than have you sit on hold.
  • Wrong or incomplete address: tell us before the order reaches shipped. What you entered at checkout goes onto the label as typed, and there is no way to edit it yourself after payment. Once a label is bought the parcel goes where the label says.
  • The parts are wrong or the print failed: that is a quality question rather than a shipping one — see /docs/farm/quality.

What an address has to contain#

Web orders collect the address in Stripe Checkout, which validates the format for the destination country and hands it back to us. Print API orders post the fields directly, and five of them are required.

Print API shipping fields
recipientNamestringrequired
Name on the label. Also accepted as name.
street1stringrequired
Street address. Also accepted as address1.
street2stringoptional
Apartment, suite, unit. Also accepted as address2.
citystringrequired
City.
statestringrequired
State or province.
zipstringrequired
Postal code. Also accepted as postalCode.
countrystringoptionaldefault US
Two-letter country code. Outside the supported list the order is refused at submission.
phonestringoptional
Carrier contact number. Useful on international parcels.
emailstringoptional
Where order emails go. Defaults to the email on the account that owns the API key.
Missing fields fail fast
A print API submission with a blank required field comes back as 400 with the names listed — "Missing required shipping fields: city, zip" — before anything is charged or printed.