API v1 preview

# Changelog and versioning

Preview scope and compatibility guidance for API v1.

## Change policy

Endpoints use /api/v1. During the preview, breaking changes can occur. Each one is listed below with its date and a Breaking label.

After the v1 freeze, changes are additive. We announce a breaking change or removal at least 3 months before it takes effect. The notice is a changelog entry, deprecated: true in the specification, Deprecation and Sunset headers on affected responses, and an email to affected accounts. Security or legal fixes can take effect sooner, with as much notice as we can give. The freeze date will be listed here.

Ignore unknown response fields and handle unknown enum values and error codes with a fallback. IDs and pricing_version are opaque. Timestamps use UTC RFC 3339 strings with fractional seconds. Reserved null fields can gain values in later versions.

Staff set fulfillment states and enter tracking by hand. Automatic carrier tracking is not enabled.

[Machine-readable changelog](https://ottomfg.com/docs/changelog.json)

[Public OpenAPI specification](https://ottomfg.com/docs/openapi.json)

## 2026-10-11 · Quote delivery estimates

- Added Open quotes now return estimated_production_business_days, and each shipping option returns estimated_ship_date and estimated_delivery, all as if the order were paid at read time. Read the quote again after the new estimates_valid_until for current dates. Expired quotes return null estimates.

## 2026-10-09 · Voided shipping labels

- Changed A shipped order can return to in_production when staff void an unused shipping label before the carrier takes the box. shipment becomes null and order.in_production is emitted again; the next order.shipped carries the new tracking.

## 2026-10-08 · Fulfillment states

- Added Orders can now reach in_production, shipped, delivered and on_hold, and emit order.in_production, order.shipped, order.delivered, order.on_hold and order.resumed. shipment carries the carrier and tracking details; hold carries a code and a message for the customer.
- Changed Customer cancellation ends when production starts. Cancelling an order in in_production, shipped, delivered or on_hold returns 409 cancellation_unavailable.

## 2026-10-07 · API v1 preview

- Added First public version of the OTTOMFG API at /api/v1. Upload files, register models, calculate prices, create quotes and orders, pay with a saved card, download invoices and receive webhooks. Fulfillment states and a public sandbox are planned.

API v1 preview

Source: https://ottomfg.com/docs/changelog
