API v1 preview

# The Quote object

Saved prices, destination and shipping options, valid for 30 minutes.

## Fields

`id` string · required

Server-generated public quote ID: quote_ plus 32 lowercase hexadecimal digits representing an opaque random value. Immutable and opaque; not a storage path or content hash.

Min length: 38 · Max length: 38

`created_at` string (date-time) · required

Creation time in UTC RFC 3339 with six fractional-second digits (microseconds).

`expires_at` string (date-time) · required

Last time this quote may be accepted: exactly 30 minutes after created_at. Covers manufacturing prices and all offered shipping charges. Reading the quote never extends this deadline. UTC RFC 3339 with six fractional-second digits (microseconds).

`currency` string · required

Literal usd. All monetary fields are USD cents.

Always: `"usd"`

`items` array · required

Priced items, merged by model and print size, in first-appearance order.

[Line item object](https://ottomfg.com/docs/line-item-object.md)

`shipping_address` object · required

Saved US recipient address. New quotes return a five-digit ZIP code.

**shipping_address fields**

`name` string · required

Delivery recipient; may differ from the buyer.

Min length: 1 · Max length: 255

`company` string · optional

Optional recipient company.

Min length: 1 · Max length: 255

`line1` string · required

Street address.

Min length: 1 · Max length: 200

`line2` string · optional

Optional apartment, suite, or additional address line.

Min length: 1 · Max length: 200

`city` string · required

Destination city/locality.

Min length: 1 · Max length: 100

`state` string · required

Supported two-letter US state or territory code, or AA/AE/AP military region.

Min length: 1 · Max length: 2

`postal_code` string · required

Five-digit ZIP code on new quotes. Older saved snapshots may retain ZIP+4.

Min length: 1 · Max length: 10

`country` string · required

Literal US.

Always: `"US"`

Min length: 1 · Max length: 2

`phone` string · optional

Recipient contact; required where the selected carrier/service requires it.

Min length: 1 · Max length: 50

`email` string (email) · optional

Min length: 1 · Max length: 254

`buyer` object · optional

Optional buyer details, separate from the delivery recipient. The authenticated account owns the quote and order.

**buyer fields**

`name` string · optional

Buyer name.

Min length: 1 · Max length: 255

`company` string · optional

Buyer company.

Min length: 1 · Max length: 255

`email` string (email) · optional

Min length: 1 · Max length: 254

`estimated_production_business_days` object | null · required

Production business days if the order is paid now; null once the quote expires.

**estimated_production_business_days fields**

At least one of these conditions applies:

**object**

`min` integer · required

Minimum: 0

`max` integer · required

Minimum: 0

**null**

null

`shipping_options` array · required

At most one option per estimated transit day: keep the cheapest carrier service. For ranges, group by maximum transit business days. Omit slower options that cost as much or more than a faster option. Ties select a service deterministically. Options remain ordered by shipping price; transit estimates are not guaranteed.

**shipping_options item fields**

`id` string · required

Opaque service-generated ID for an option within a particular quote. Not a carrier rate ID. Cannot be transferred to another quote.

`name` string · required

Customer-facing shipping service label.

Min length: 1

`carrier` string · optional

Optional carrier name, when a carrier is committed for this option.

Min length: 1

`totals` object · required

Manufacturing and shipping charges in integer minor currency units. Total excludes tax.

**totals fields**

`subtotal` integer · required

Sum of model line subtotals, excluding shipping and tax. Integer minor currency units.

Minimum: 0

`shipping` integer · required

Carrier rate for the estimated parcel, including its packing weight. No general free-shipping credit; an account-specific arrangement can price one service at 0. Integer minor currency units (for USD, cents).

Minimum: 0

`total` integer · required

Amount to review before ordering: subtotal + shipping. Tax is excluded in V1. Integer minor currency units (for USD, cents).

Minimum: 0

`estimated_transit_business_days` object | null · required

Carrier transit days when supplied; otherwise the supported service estimate. Starts at handoff, excludes production, and is not guaranteed.

**estimated_transit_business_days fields**

At least one of these conditions applies:

**object**

`min` integer · required

Minimum: 0

`max` integer · required

Minimum: 0

**null**

null

`estimated_ship_date` string (date) | null · optional

Quotes only: estimated carrier handoff if the order is paid now, in origin local date. Null once the quote expires. Orders omit it; read the order's estimated_ship_date.

`estimated_delivery` object | null · required

Quotes: estimated arrival window if the order is paid now, in destination local dates, including production. Null once the quote expires or when transit is unknown. Orders keep null; read the order's estimated_delivery.

**estimated_delivery fields**

At least one of these conditions applies:

**object**

`earliest` string (date) · required

`latest` string (date) · required

**null**

null

`pricing_version` string · required

Opaque identifier for the pricing schedule used. Store it for reference; do not parse it or calculate prices from it. A calculation does not lock prices; review a quote before ordering. Business pricing versions change at calendar-month boundaries; unaccepted quotes then require refreshing.

`status` string · required

Derived at response time: open before expires_at, expired at or after it. Recomputed on GET; an idempotent replay returns the original status. Commercial snapshot fields never change. It describes expiry only, not order or payment status.

Allowed values: open, expired

`estimates_valid_until` string (date-time) | null · required

When this quote's date estimates next change; read the quote again after it. Can be before expires_at. Null once the quote expires. UTC RFC 3339 with six fractional-second digits (microseconds).

## Returned by

- [Create a quote](https://ottomfg.com/docs/create-quote.md)
- [Get a quote](https://ottomfg.com/docs/get-quote.md)

Example

JSON

```
{
  "id": "quote_6c82bd3e319b4bb099310d54a761879e",
  "created_at": "2026-09-17T18:00:00.000000Z",
  "expires_at": "2026-09-17T18:30:00.000000Z",
  "currency": "usd",
  "items": [
    {
      "model_id": "MD-739YQ549",
      "longest_dimension_mm": 100,
      "quantity": 2,
      "dimensions_mm": {
        "x": 100,
        "y": 50,
        "z": 20
      },
      "unit_price": 2460,
      "subtotal": 4920,
      "repair": {
        "required": false,
        "applied": false,
        "reason": null,
        "status": "not_applied",
        "fee": 0,
        "covered_by_order_id": null
      }
    }
  ],
  "shipping_address": {
    "name": "Test Recipient",
    "line1": "123 EXAMPLE ST",
    "city": "SEATTLE",
    "state": "WA",
    "postal_code": "98101",
    "country": "US"
  },
  "buyer": {
    "company": "Example Store",
    "email": "orders@example.com"
  },
  "estimated_production_business_days": {
    "min": 3,
    "max": 3
  },
  "shipping_options": [
    {
      "id": "shipopt_6c82bd3e319b4bb099310d54a761879e",
      "name": "UPS Ground",
      "totals": {
        "subtotal": 4920,
        "shipping": 1000,
        "total": 5920
      },
      "estimated_transit_business_days": {
        "min": 3,
        "max": 3
      },
      "estimated_ship_date": "2026-09-21",
      "estimated_delivery": {
        "earliest": "2026-09-24",
        "latest": "2026-09-24"
      },
      "carrier": "UPS"
    },
    {
      "id": "shipopt_8c1f25d94e3142f8b9a70635d42c81e0",
      "name": "USPS Priority Mail Express",
      "totals": {
        "subtotal": 4920,
        "shipping": 2000,
        "total": 6920
      },
      "estimated_transit_business_days": {
        "min": 1,
        "max": 1
      },
      "estimated_ship_date": "2026-09-21",
      "estimated_delivery": {
        "earliest": "2026-09-22",
        "latest": "2026-09-22"
      },
      "carrier": "USPS"
    }
  ],
  "pricing_version": "pv_20261001_model_repair_01",
  "estimates_valid_until": "2026-09-17T21:00:00.000000Z",
  "status": "open"
}
```

API v1 preview

Source: https://ottomfg.com/docs/quote-object
