Skip to content

lob

Use when working with Lob API for physical mail — sending certified letters, address verification, tracking, or webhook handling. Also use when sending USPS mail programmatically.

ModelSource
sonnetpack: mail
Full Reference

┏━ 🔧 lob ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Lob API — physical mail, letters, address verify ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Physical mail automation via Lob API — letters, certified mail, address verification, webhooks.

ItemValue
API basehttps://api.lob.com/v1
AuthHTTP Basic — API key as username, empty password
Key prefixestest_ (sandbox) / live_ (production)
Rate limits3 req/min (send), 10 req/min (tracking)
Letter pricingFrom $0.90/letter (Developer plan)
Certified surcharge+$6.70 per letter
Certified + return receipt~$9.52 surcharge
Webhook retries8 retries over ~27.5h; auto-disabled after 5 failure days
DocWhat’s inside
reference/letters.mdPOST /letters, HTML rendering requirements, tracking events
reference/addresses.mdPOST /us_verifications, deliverability enum, response shape
reference/webhooks.mdEvent types, HMAC-SHA256 verification, replay protection
reference/pricing.mdPer-plan costs, certified surcharges, address verification pricing

Create a letter:

Terminal window
curl -X POST https://api.lob.com/v1/letters \
-u "YOUR_API_KEY:" \
-d "to[name]=John Smith" \
-d "to[address_line1]=123 Main St" \
-d "to[address_city]=Springfield" \
-d "to[address_state]=IL" \
-d "to[address_zip]=62701" \
-d "from=adr_xxxx" \
-d "file=<html>...</html>" \
-d "color=false"

Verify an address:

Terminal window
curl -X POST https://api.lob.com/v1/us_verifications \
-u "YOUR_API_KEY:" \
-d "primary_line=123 Main St" \
-d "city=Springfield" \
-d "state=IL" \
-d "zip_code=62701"

Get letter status:

Terminal window
curl https://api.lob.com/v1/letters/ltr_xxxx \
-u "YOUR_API_KEY:"
MistakeFix
Sending live mail in devUse test_ prefixed API key — mail is never printed
HTML without <html><body> wrapperLob requires full HTML document structure
Address window area blocked by contentKeep 4” x 1.5” window area clear (see letters.md)
Missing webhook timestamp headerCheck Lob-Signature-Timestamp, not just Lob-Signature
Replay attack window too wideReject requests older than 5 minutes
Forgetting certified tracking events differCertified has additional event types — see webhooks.md