---
title: "Read payment, mailing status, scans and delivery estimates."
method: GET
path: "/v1/letters/{id}"
---

# Read payment, mailing status, scans and delivery estimates.

`GET /v1/letters/{id}`

## Request

- Base URL: `https://paperagent.dev`
- URL: `https://paperagent.dev/v1/letters/{id}`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://paperagent.dev/oauth/authorize`, token URL `https://paperagent.dev/oauth/token`, scopes: `letters:read`)
  - API key in header `X-Api-Key`
  - HTTP bearer

## Path parameters

- `id` string, required

## Response `200`

Success

- object
  - `tracking_number` string: USPS Certified Mail tracking number, present once the operator saves it.
  - `tracking_url` string: Direct USPS tracking link. Share it with the user when available.
  - `letter_id` string, required
  - `livemode` boolean, required: False for sandbox letters, which are never mailed.
  - `tier` 'standard' | 'proof_of_mailing' | 'certified' | 'certified_err' | 'registered', required
  - `status` 'pending_payment' | 'pending_moderation' | 'held_for_review' | 'queued' | 'printed' | 'postage_applied' | 'accepted_by_usps' | 'in_transit' | 'arrived_at_destination_facility' | 'expected_delivery' | 'delivered' | 'blocked' | 'cancelled' | 'payment_abandoned' | 'returned', required: Where the letter is. expected_delivery is the last state a standard or proof-of-mailing letter reaches; only certified tiers ever reach delivered.
  - `description` string, required: One sentence for the user about where this letter is.
  - `mail_date` string, required: The calendar date (YYYY-MM-DD, New York time) this piece goes to USPS.
  - `expected_delivery_estimate` object, nullable, required: The window (YYYY-MM-DD, New York time) USPS is expected to deliver in. USPS does not scan plain letters at delivery, so this is an estimate and never a confirmation.
    - `earliest` string, required
    - `latest` string, required
  - `delivery_confirmation` boolean, required: False for every tier USPS does not scan at delivery. Never claim otherwise.
  - `delivered_at` string, nullable: Certified tiers only, and absent entirely for the tiers USPS does not scan.
  - `disclosure` string, nullable, required: Say this to the user whenever an expected delivery date is shown.
  - `scans` object[], required
    - `phase` integer, required: The USPS processing phase this scan came from, 0 through 4.
    - `scanned_at` string, required
    - `description` string, required
  - `created_at` string, required
  - `cancelled_at` string, nullable, required
  - `payment` object, required
    - `order_id` string, required
    - `order_status` 'pending' | 'awaiting_payment' | 'paid' | 'failed' | 'refunded' | 'disputed' | 'abandoned', required
    - `paid_at` string, nullable, required
    - `payment_url` string
    - `payment_options` object
      - `provider` 'stripe', required
      - `methods` string[], required
      - `network_id` string, required
      - `currency` 'usd', required
      - `amount_cents` integer, required
      - `livemode` boolean, required
    - `payment_status` 'requires_action' | 'processing' | 'unknown'
    - `total` object, required: An amount of money. Always read amount_cents; display is for showing the user.
      - `amount_cents` integer, required: The amount in whole US cents.
      - `currency` 'USD', required
      - `display` string, required: The amount formatted for a person, with a currency symbol.
    - `checkout_url` string: Present only while the letter is waiting for payment. Give it to the user.

## Other responses

- `default`: A stable error code and actionable message. 401: authenticate; 403: permission or policy; 404: unavailable object; 409: conflict; 422: domain refusal; 429: quota; 5xx: retry or contact support.

---

[API](https://skmtc.dev/paperagent/apis/paperagent-rest-api.md) · [All operations](https://skmtc.dev/paperagent/apis/paperagent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/paperagent/apis/paperagent-rest-api/revisions/388148938051?raw)
