Skip to main content
POST
Send a letter

Authorizations

Authorization
string
header
required

Optional developer API key: Authorization: Bearer pp_live_… (or pp_test_… for a sandbox-only key). Omitting it is a supported way to call every route. A key that is sent and does not verify is refused with 401 rather than treated as anonymous, so a typo fails loudly instead of quietly losing the restriction you meant to apply. Enabled per deployment via SCOPED_API_KEYS.

Headers

Idempotency-Key
string

Caller-chosen unique string. A retry with the same value replays the original order (HTTP 200, replayed: true) instead of creating a second one.

Body

application/json
mail_class
enum<string>
required
Available options:
first_class,
certified,
certified_err,
priority
to
object
required
from
object
required
color
boolean
tracking
boolean
text
string
Maximum string length: 50000
font
string
Maximum string length: 40
upload_key
string
Pattern: ^up_[0-9a-f]{32}\.pdf$
pdf_base64
string
Maximum string length: 14000000
pdf_url
string<uri>
email
string<email>
Pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
credit_code
string
Pattern: ^pp-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}$
account_session
string
Maximum string length: 2000
webhook_url
string<uri>
sandbox
boolean
format
enum<string>
default:letter

The physical piece to mail. Defaults to 'letter'. Postcards (postcard_4x6 $1.99, postcard_6x9 $2.99, postcard_6x11 $3.49) and the notecard (notecard $5.99 — a folded card, enclosed like a greeting card rather than open-face like a postcard) are message-only today: text prints on the piece itself via a handwriting engine, no custom photo or artwork side, and no PDF/upload path; printing and First-Class postage are both included in the price. All of them allow only mail_class='first_class' and carry no tracking.

Available options:
letter,
letter_windowed,
notecard,
postcard_4x6,
postcard_6x9,
postcard_6x11
remove_branding
boolean

Pay to leave the "Mailed via paperplane" mark off this envelope. Only charged where a mark would otherwise have been printed — never on Certified, Priority, or postcards, which carry no mark to begin with.

confirmation_token
string
Maximum string length: 2000
checkout_ui_mode
enum<string>
Available options:
hosted,
embedded

Response

Idempotent replay. The Idempotency-Key was already used, so the original order is returned with replayed: true and nothing new was created or charged. Distinguishable from a fresh send by the status code alone.

status
enum<string>
required
Available options:
ok,
action_required,
failed
order
object
required
reason
string
next
string[]
corrected_to
object
capability
object
replayed
boolean
checkout_ui_mode
enum<string>
Available options:
hosted,
embedded
payment_url
string<uri>
payment_client_secret
string
Last modified on September 17, 2026