---
title: "Preview a card"
method: POST
path: "/v1/quotes"
tags: ["cards"]
---

# Preview a card

`POST /v1/quotes`

## Request

- Base URL: `https://api.noerrands.com/c/cards`
- URL: `https://api.noerrands.com/c/cards/v1/quotes`
- Auth: HTTP bearer

Price one card and hold a single-use quote for 24 hours: the design, message, sign-off, style, recipient, return address, and either send_on (dispatch date) or arrive_by (we work the dispatch date out); returns quote_id, price_cents, dispatch_on and estimated_arrival. Free and not consequential -- nothing is charged or mailed -- and the only way to get the quote_id send_card needs.

## Request body

- object
  - `design_id` string, required: From list_card_designs. Fixes the tier.
  - `message` string, required: The message inside the card. Up to 320 characters handwritten, 500 printed. Use \n for line breaks.
  - `signoff` string: The closing line, e.g. "Love, Sam".
  - `handwriting_style` string: Handwritten tier only: a style_id from list_handwriting_styles. Defaults to the first style.
  - `to` object, required: Who receives the card. US only.
    - `name` string, required: Recipient or sender name, 1-40 characters.
    - `company` string: Optional company line, up to 40 characters.
    - `line1` string, required: Street address, up to 64 characters.
    - `line2` string: Apartment, suite, or unit, up to 64 characters.
    - `city` string, required
    - `state` string, required: Two-letter US state code.
    - `zip` string, required: ZIP code, 5 digits or ZIP+4.
    - `country` 'US': US only in v0.
  - `from` object, required: The sender and return address. US only.
    - `name` string, required: Recipient or sender name, 1-40 characters.
    - `company` string: Optional company line, up to 40 characters.
    - `line1` string, required: Street address, up to 64 characters.
    - `line2` string: Apartment, suite, or unit, up to 64 characters.
    - `city` string, required
    - `state` string, required: Two-letter US state code.
    - `zip` string, required: ZIP code, 5 digits or ZIP+4.
    - `country` 'US': US only in v0.
  - `send_on` string, date: Dispatch date, YYYY-MM-DD. Give this or arrive_by, not both. Omit both to send today.
  - `arrive_by` string, date: Date the card should arrive by, YYYY-MM-DD. The dispatch date is worked out from it.

## Response `200`

Success.

- object
  - `quote_id` string, required: Single-use, valid 24 hours. Pass to send_card with confirm: true.
  - `tier` 'handwritten' | 'printed', required: handwritten: a folded card written with a real pen, in a stamped envelope. printed: a 6x9 postcard-style card, message printed on the back where anyone handling it can read it.
  - `design` object, required
    - `design_id` string, required: Pass to preview_card. hw_... is handwritten, pr_... is printed.
    - `name` string, required
    - `tier` 'handwritten' | 'printed', required: handwritten: a folded card written with a real pen, in a stamped envelope. printed: a 6x9 postcard-style card, message printed on the back where anyone handling it can read it.
    - `occasion` 'birthday' | 'thank_you' | 'sympathy' | 'holiday' | 'congratulations' | 'anniversary' | 'get_well' | 'thinking_of_you' | 'other', required: birthday, thank_you, sympathy, holiday, congratulations, anniversary, get_well, thinking_of_you or other.
    - `price_cents` integer, required: What a card in this design costs, in credits.
    - `image_url` string, uri: Cover image hosted by the provider, when it has one.
    - `preview_url` string, uri: A page showing the front of a printed design.
  - `handwriting_style` string
  - `price_cents` integer, required
  - `balance_cents` integer, required: General credit available now.
  - `affordable` boolean, required: Whether the balance covers price_cents now.
  - `dispatch_on` string, date, required: The day the card goes to the provider.
  - `estimated_arrival` object, required
    - `earliest` string, date, required: Earliest likely delivery date.
    - `latest` string, date, required: Latest likely delivery date. USPS does not guarantee it.
  - `expires_at` string, date-time, required
  - `preview_url` string, uri
  - `notes` string[], required

## Other responses

- `400`: invalid_request
- `401`: unauthorized. Carries WWW-Authenticate: Bearer resource_metadata="..."
- `403`: forbidden_scope: a write tool called with a read-only key.
- `404`: not_found
- `429`: rate_limited
- `502`: provider_error

---

[API](https://skmtc.dev/noerrands/apis/no-errands-cards-api.md) · [All operations](https://skmtc.dev/noerrands/apis/no-errands-cards-api/llms.txt) · [OpenAPI document](https://skmtc.dev/noerrands/apis/no-errands-cards-api/revisions/f39a5d132f73?raw)
