# paperplane > Letters, Certified Mail and postcards from REST, MCP or the CLI. No API key, no account. Quote, confirm, send. - [paperplane — Mail a real letter from code](https://paperplane-justin-winter-s-projects.vercel.app/docs/index.md): Upload a PDF or paste text. We print it, stuff it, stamp it, and hand it to USPS — from $1.99, no account required. - [Quickstart](https://paperplane-justin-winter-s-projects.vercel.app/docs/quickstart.md): Send your first letter in about two minutes, for free. - [Build with agents](https://paperplane-justin-winter-s-projects.vercel.app/docs/agents.md): Give any AI agent hands on physical mail: MCP in one command, REST in two calls, safe by construction. - [The delivery guarantee](https://paperplane-justin-winter-s-projects.vercel.app/docs/guarantee.md): If we accept it, we're sending it. If it doesn't reach USPS, you're refunded automatically. - [Core concepts](https://paperplane-justin-winter-s-projects.vercel.app/docs/concepts.md): Tokens, security, and the mental model for how paperplane works. - [Sandbox mode](https://paperplane-justin-winter-s-projects.vercel.app/docs/sandbox.md): Run the entire send flow for free, instantly, with no keys and no real mail. - [Agent benchmark](https://paperplane-justin-winter-s-projects.vercel.app/docs/benchmark.md): A reproducible transcript: quote → send → track in 3 calls, zero schema retries, replay-proof. - [MCP server](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/mcp.md): Give Claude or any MCP client the ability to send real physical mail. - [Order lifecycle overview](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/lifecycle.md): Every letter moves through the same four phases — compose, proof, dispatch, track. What happens in each, and where to go deeper. - [Error contract](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/errors.md): Every error code, its retry semantics, and the machine-readable recovery step — a contract, not a troubleshooting page. - [Send Policies](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/send-policies.md): The named spend-safety layer behind every send: confirmation tokens, idempotency keys, capability tokens, and the sandbox/live split. - [CLI](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/cli.md): Quote, send, and track real physical mail from the command line. - [Payments](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/payments.md): How orders get paid — Stripe links and prepaid credit codes, and what the confirmation flow requires. - [Credits](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/credits.md): Prepaid balances that pay for letters without a card at every checkout. - [Agent payments (x402)](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/agent-payments.md): Let a funded agent wallet pay for postage directly — no human checkout, no card. - [ROI calculator](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/roi-calculator.md): The real math for print-stuff-stamp vs. paperplane, worked from live pricing and published USPS rates. - [Addresses](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/addresses.md): USPS verification, autocomplete, and how paperplane handles corrected addresses. - [Bulk sending (CSV import)](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/bulk-import.md): Send many letters from a spreadsheet, with automatic header mapping. - [Cancel & track](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/cancel-track.md): Cancel a letter before it prints, and track it live with a shareable link. - [Embed the send flow](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/embed.md): Let visitors mail documents from your own site — one script, two widgets, live demos you can click. - [Send by email](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/email-to-send.md): Email paperplane a recipient and a letter, in your own words, and get a quote you confirm by replying. - [Send by text (SMS)](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/imessage-to-send.md): Text a recipient and a letter, get a quote, reply yes, and we mail it. - [Preview before you pay](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/print-preflight.md): See the exact PDF that will mail before spending anything. - [Letter templates](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/templates.md): Start from a proven template for security deposits, IRS responses, and notices to vacate. - [Delivery webhooks](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/webhooks.md): Get pushed status updates for your letters instead of polling. - [Integrations (Zapier, n8n, Make)](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/integrations.md): Connect paperplane to your workflow — what works today and the native-app roadmap. - [Rate limits](https://paperplane-justin-winter-s-projects.vercel.app/docs/guides/rate-limits.md): Velocity and spend caps that keep the free, keyless model safe from abuse. - [Tutorial: send a security deposit demand letter](https://paperplane-justin-winter-s-projects.vercel.app/docs/tutorials/demand-letter.md): A complete end-to-end walkthrough — from quote to certified delivery proof. - [Tutorial: an agent sending mail on its own](https://paperplane-justin-winter-s-projects.vercel.app/docs/tutorials/agent-workflow.md): The exact tool calls an AI agent makes to quote, confirm, send, and track a letter. - [Price a letter before sending it](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/price-a-letter-before-sending-it.md): Free — creates nothing and never touches payment. The price is all-in (postage, printing and the envelope included); `breakdown` lists the piece and any options that make up the total. Quoting first is the recommended shape for agents: it is the safe call, and it tells the user what a send will cost… - [Send a letter](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/send-a-letter.md): Renders the document, prices it, verifies both addresses with USPS, then either charges a prepaid credit code or returns a Stripe payment link. **This spends money and mails a physical object to a real address.** Charges the sender once payment is captured — immediately if a credit code covers it, o… - [Fetch an order](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/fetch-an-order.md): Free — read-only, no charge. Poll this for status after a send. Terminal statuses are `delivered`, `refused`, `canceled`, and `failed`; the rest (`draft`, `pending_payment`, `screening`, `held_for_review`, `submitted`, `mailed`) still move. Prefer `webhook_url` on the order over polling. - [Cancel an order](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/cancel-an-order.md): Free — releases any payment hold rather than charging anything, so it requires the `cancel_token` the order creation response returned. Send it in the `X-Capability-Token` header (`X-Cancel-Token` is accepted as a legacy alias). Only possible before the letter is handed to the provider; once submitt… - [Get a signed URL to upload a PDF](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/get-a-signed-url-to-upload-a-pdf.md): Mint a one-shot signed URL so the PDF goes straight to storage instead of base64 through this API. Returns an opaque `upload_key` to pass as `upload_key` on POST /v1/orders. No auth, so a crude per-IP throttle bounds abuse; the bucket enforces 10MB and `application/pdf`, the order path enforces the… - [Upload PDF bytes (keyless dev only)](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/upload-pdf-bytes-keyless-dev-only.md): Keyless-dev upload sink. With storage configured, POST /v1/uploads hands back a real signed URL and the browser never touches this route — which is why it hard-refuses unless storage is the in-memory fallback. It exists so the two-step upload flow is the only client path, dev included. - [Propose a header→field mapping for a bulk import](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/propose-a-header→field-mapping-for-a-bulk-import.md): Parsing happens in the browser, so only the header row and up to three sample rows ever leave the device — never the full recipient list. Advisory: the user confirms or overrides every field before a row becomes an order. - [Suggest a mail class for a draft](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/mail/suggest-a-mail-class-for-a-draft.md): Advisory only, never authoritative — the sender always picks. LLM-backed when ANTHROPIC_API_KEY is set, word-bounded heuristic otherwise. - [Look up a prepaid credit balance](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/credits/look-up-a-prepaid-credit-balance.md): Balances are split in two: `face_cents` is paid-for value (5 years, per the CARD Act) and `bonus_cents` is promotional value (12 months, spent first). - [Buy a credit pack](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/credits/buy-a-credit-pack.md): Returns a Stripe-hosted checkout URL (default) or, with `checkout_ui_mode: "embedded"`, a Stripe Embedded Checkout `payment_client_secret` to mount in place. The credit code is emailed once payment settles either way. - [Buy a credit pack via x402 (agent payments)](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/credits/buy-a-credit-pack-via-x402-agent-payments.md): Agent-payable alternative to /v1/credits/checkout for funded agents that can't open a human payment_url. Follows the x402 v2 handshake: call once without an X-PAYMENT header to get a 402 challenge, then retry with the header set to a signed payment payload. Disabled on deployments without a configur… - [List published reviews](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/reviews/list-published-reviews.md): Only 4- and 5-star reviews written about a real delivered order are published, newest first, capped at 24. `sample: true` marks an illustrative entry rather than a real customer; the live wall no longer seeds any, so in practice the flag is absent or false. - [Review a delivered order](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/reviews/review-a-delivered-order.md): One review per order. The reviewer identity (name, city, state) is derived server-side from the order return address — it is never accepted from the caller. Requires the `capability_token` returned by the order creation response: publishing attribution is a public action, so the order id alone is no… - [Address typeahead](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/addresses/address-typeahead.md): Server-side proxy so the geocoding key never reaches a browser. Returns `enabled: false` with no suggestions when no key is configured. Suggestions are convenience only — USPS verification at order time remains authoritative. - [Nearest mailable address for a coordinate](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/addresses/nearest-mailable-address-for-a-coordinate.md): Backs the one-tap "use my location" control in the send flow. - [Public site totals](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/meta/public-site-totals.md): Currently just the running count of letters mailed (sandbox and live), the number the homepage footer counter reads. - [This document](https://paperplane-justin-winter-s-projects.vercel.app/docs/api-reference/meta/this-document.md): Generated from the zod schemas at request time, so it always describes the code that is actually deployed. ## OpenAPI Specs - [openapi](/docs/openapi.json) ## Optional - [Status](https://sendpaperplane.com/status)