See the error contract’s lifecycle table for the full state-by-state breakdown.
Compose
Assemble a recipient and content into something ready to price. There’s no order yet — nothing here costs anything or touches USPS. Content can come from rawtext or a pdf_url on the API, the composer at /send, a template pre-filled from the gallery, an embedded widget on someone else’s site, a row from a CSV import, a forwarded email, or a text (SMS) conversation.
- Endpoint — none required yet;
GET /v1/address/autocompletehelps fill in the recipient as they type (see Addresses). - UI surfaces — the
/sendcomposer,template-embed.js/paperplane.js, the CSV mapper (POST /v1/csv-map).
Proof
Confirm what will actually print and what it will cost — before any money moves. Two things happen here, together:- See the exact PDF. The composer’s “See the exact PDF before you pay” link renders the letter through the same
renderTextToPdfthe order path uses, so preview can never diverge from what mails. - Price it and mint a
confirmation_token.POST /v1/quotesreturns the all-in price plus a single-use, 30-minute token bound to the exact recipient, content, class, and price. On the agent surface,POST /v1/ordersrequires that token — a send can never be the first call.
- Endpoint —
GET /api/preview,POST /v1/quotes(or thequote_letterMCP tool). - UI surface — the composer’s preview link.
Dispatch
Turn the proofed letter into a real, paid, mailed piece.POST /v1/orders does all of it in one call:
- USPS verifies both addresses (correcting casing/formatting where needed).
- Payment settles — a Stripe-hosted link the human approves, a prepaid credit code, or (sandbox) nothing at all.
- Content is screened; a flagged letter goes to
held_for_reviewinstead of printing. - The print facility accepts it (
submitted) and hands it to the carrier (mailed).
- Endpoint —
POST /v1/orders(orsend_letterover MCP). - UI surface — the order page while payment or review is pending.
Track
Once it’s mailed, watch it move and step in if you still can.-
Poll
GET /v1/orders/{id}, or passwebhook_urlat order creation to get pushed on every transition instead. -
Share the public timeline at
/track/{trackingNumber}— no login, safe to hand to the recipient or a lawyer. -
Cancel with
DELETE /v1/orders/{id}and the order’scancel_token, while it’s stillpending_payment,screening, orheld_for_review. Oncesubmitted, it’s in the pipe. -
Review with
POST /v1/reviewsand thereview_token, oncedelivered. -
Endpoint —
GET /v1/orders/{id},DELETE /v1/orders/{id},POST /v1/reviews. -
UI surface — the order page (private) and
/track/{trackingNumber}(public).