A physical checkpoint for online accountsDomestic addresses only
POST RequestForm PR-01

A physical checkpoint for online accounts

We mail POST cardsto verify your users.

POST Request mails a verification code to a U.S. address. When your user scans and confirms, you get a signed webhook and one more reason to believe they (probably) aren’t an AI. (For now.)

Rates from
$1.50 / attempt
Standard schedule
5–7 business days
Completion
Signed webhook
One last step
Scan to continueCARD …7F3A
POST RequestForm PR-01
Your card has arrived

GOOD THINGS COME TO THOSE WHO WAIT 5–7 BUSINESS DAYS.

What your user receives

A better reason to check the mail.

The card carries a QR credential for one verification. It can complete that verification once; the completed page may remain available until the record is purged.

  1. 01 / Delivery

    A POST card arrives

    Its QR code is a credential: anyone who can see or copy it can use it unless you also require email binding.

  2. 02 / Verification

    They scan and confirm

    The QR code opens a short verification page. With email binding enabled, they also enter a code sent to their email as a second factor.

  3. 03 / Return

    Signed and returned

    They see the green VERIFIED postmark. Your server receives the signed webhook.

POST RequestCompletion receipt
FORM PR-01 / COPY B
  1. Mail progressed
  2. Credential opened
  3. Verification completed
Card
...7F3A
Binding
Email OTP
Event
verification.verified
VERIFICATION DIVISIONPOST REQUESTVERIFIED
COMPLETE / SIGNED EVENT RETURNED
A completed card fires verification.verified

The delivery loop

One request. One physical checkpoint.

One API call sends the card. A signed webhook records completion of its credential.

  1. 01

    Submit an address

    Your server sends a domestic mailing address. We validate it, debit your postage balance, and create a single-use credential.

    POST /api/v1/verifications
  2. 02

    We print and mail

    We print the card and send it by U.S. mail.

    PRINTED -> IN TRANSIT
  3. 03

    Your user closes the loop

    They scan the card and confirm receipt. Email-bound cards also require the account code. We sign a webhook when complete.

    verification.verified

Fraud resistance

Add a physical step to signup.

Each live attempt buys a mailpiece and adds postal delay. You pay the postage unless you pass the fee through; shared addresses and forwarded credentials are still possible.

01 / Delivery

A physical step for every attempt

Each verification requires a card sent through the U.S. mail.

02 / Optional binding

Pair the card with email

If you enable email binding, your user confirms with the card and a code sent to their account.

03 / Single use

One card, one completion

A credential completes its verification once. It does not establish a unique person or prevent that person from using other cards.

Domestic rates / July 2026

Postage, not seats.

Prepay a dollar balance. Each mailpiece debits its rate. Credits do not expire.

ClassFormat and scheduleRate
Standard DefaultPostcard / mailed next day / 5–7 business daysThe default. A postcard dispatched the next business day — the everyday checkpoint for most integrations.$1.50
SealedSealed letter / mailed next day / 5–7 business daysA letter in a security-tinted envelope, with the code inside. Less exposed than a postcard, but not confidential from anyone who opens it. Sealed is not Certified Mail or a compliance certification.$4.00
Credits never expire — buy postage now, spend it whenever.Postage is non-refundable once created, with two exceptions: a print rejection is credited in full; an undeliverable Sealed piece is credited 50%.
SEALEDNO. PR-0001-C2E9
Sealed keeps the code inside a security-tinted envelope. Mailing and return-address information remain visible; the service may still be identifiable.

Integration

A request now. A webhook later.

1 / Create verificationHTTP
curl https://postrequest.dev/api/v1/verifications \
  -H "Authorization: Bearer pr_live_..." \
  -H "Idempotency-Key: signup-user-8123-v1" \
  -H "Content-Type: application/json" \
  -d '{
    "address": {
      "line1": "1600 EXAMPLE ST",
      "city": "SEATTLE",
      "state": "WA",
      "zip": "98101"
    },
    "class": "standard",
    "binding": "email_otp",
    "email": "[email protected]",
    "external_id": "user_8123"
  }'
2 / Receive completionWEBHOOK
{
  "event_id": "evt_67b8c2735ab5de033a",
  "occurred_at": "2026-07-17T15:02:11Z",
  "type": "verification.verified",
  "id": "01JZ3NVJ4M8Q",
  "external_id": "user_8123",
  "status": "verified",
  "verified_at": "2026-07-17T15:02:11Z",
  "binding": "email_otp"
}

Start the clock

Send the first card.