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#
| Destination | Flat rate | Free at | Checkout |
|---|---|---|---|
| United States | $7.00 | $50.00 and up | Cart, print API |
| International | $30.00 | $500.00 and up | Cart in international mode, print API |
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.
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.
| Checkout | Countries accepted |
|---|---|
| Cart, domestic mode | US |
| Cart, international mode | CA, GB, AU, DE, FR, IN, IE, NZ, NL, ES, IT, SE, NO, DK, FI, CH, AT, BE, PT, SG, JP, AE |
| Single store product | US, CA, GB, AU, DE, FR, IN |
| Print API order | US, 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.
Print time and transit time are separate#
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.
| Stage | Where your order physically is | Emails you |
|---|---|---|
| placed | Paid and in the print queue. Nothing has been made yet. | No — the checkout confirmation covered it |
| printed | Off the printer and cooling. | Yes |
| packed | Boxed, waiting for the carrier pickup. | No |
| shipped | Handed to the carrier. Tracking number appears here. | Yes |
| delivered | The carrier reported it as delivered. | Yes |
Carriers and tracking links#
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.
| Carrier | Link in the shipped email | Number looks like |
|---|---|---|
| UPS | Yes — ups.com tracking | 1Z999AA10123456784 |
| FedEx | Yes — fedex.com tracking | 123456789012 |
| USPS | Yes — tools.usps.com tracking | 9400111899223197428490 |
| Other | No — there is no site we can send you to with confidence | A 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#
- 1The 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.
- 2The 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.
- 3The 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.
/api/order-status?orderId=ORD-…Signed inStatus, description and tracking number for one of your own orders.
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.
{
"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.
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.
countrystringoptionaldefaultUS- 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.
The five stages, which ones email you, and what the orders page shows.
How a basket is priced and charged, including gift cards and discounts.
How parts are packed before the label goes on.
Reading status and tracking for orders placed through the print API.