[Address verification, done for you]

We handle address verification by mail for you: the codes, the mailing, the checks and the record

Send us the addresses, from the dashboard or from your agent. We print a one-time code on a postcard or letter for each, mail it First-Class, check every code that comes back, scanned or typed, and keep the record: log in to see which addresses are verified and when, or let your agent get a webhook alert for each one.

No code generator, printer, postage or mail room on your side, and no logins or temporary accounts for the people you verify: holding the mail is the proof, the same idea as the postcard a business listing sends. For marketplaces, directories, platforms onboarding businesses, and the agents that run onboarding for them.

  • Track every address in your dashboard
  • Webhook alerts for your agent
  • One-time codes that expire
  • Free to rehearse in the sandbox
Address verification · done for youManhattan Beach, CA
1 · you send the addresses
2 · we mail + check each code
3 · you track who's verified
Holding the mail is the proof: the first entry verifies, and the code expires after 30 days.
[How it works]

Address verification as a service: we run it, you track it

You send the addresses. We print and mail a one-time code to each, check every code that comes back, and keep the record. Log in to see who's verified and when, or let your agent get an alert for each address.

  1. 1
    You
    You send the addresses

    Upload a list in the dashboard, or have your agent send it over MCP or the API, with your own id for each address.

  2. 2
    We
    We print a code on each piece

    A QR code and a short code such as K7D2-M9XQ, unique to that address.

  3. 3
    We
    We mail it

    First-Class from our facility in Manhattan Beach, CA, as a postcard or as a letter in an envelope.

  4. 4
    We
    We check every code

    Scanned, typed at mailbox.bot/v or typed in your own app, each code is matched to its address once and expires after 30 days.

  5. 5
    You
    You track every address

    Log in to see which addresses are verified and when, or let your agent get a webhook alert for each one.

Log in and track

Every verification in your dashboard

Open Batch mail: each verification batch shows how many addresses are verified, and every address with Verified and the time, or its scans so far. Download it as a CSV report whenever you like.

Alerts for your agent

A webhook the moment an address is verified

Your agent subscribes once, over MCP with create_webhook_endpoint or with POST /v1/webhooks/endpoints, and gets batch.piece.confirmed for each verified address, signed and with your id for it. batch.piece.scanned tells it about first scans.

A 4×6 postcard is $1.05 and a one-sheet letter $1.15, printing and First-Class postage included. The codes, the checks, the tracking and the alerts are included.

[Quick answer]

How do you verify an address by mail?

Mail something to the address that only someone there can read, and ask them to enter it. We print a one-time code on each postcard or letter, mail it, check it the first time it's scanned or typed, and keep the record: you see it as Verified in your dashboard, and your agent can get a webhook alert with your own id for that address. A mailed code shows that someone at the address receives mail there. It doesn't show who they are or that they own the place, so pair it with your own identity checks.

[Three ways to verify]

Scan it, type it at mailbox.bot/v, or type it into your app

Whichever way the code comes back, the first entry verifies the address: it shows as Verified in your dashboard, and your agent's webhook gets one alert.

  • Scan the QR code

    Opens a mailbox.bot page with one button, Verify my address. Afterwards the page can send them on to your own link.

  • Type it at mailbox.bot/v

    For anyone who would rather not scan. The code is printed in large type beside the QR code, with the address to type it at.

  • Type it into your app

    Your app sends it to POST /v1/batch-mail/verify with your key and gets the piece and your ref back at once, so your user sees Verified on your own screen.

[Workflows]

Three verification workflows, drawn

Each row is who acts: your app or your agent, mailbox.bot, and the person at the address. Follow the line to the outcome.

Seller onboarding on a marketplace

A new seller signs up. Your app adds them to the day's verification batch with their seller id as the ref; they type the code from the postcard on your verify screen, and your verify call marks them live.

POST /v1/batch-mail (qr.mode verify, ref) → POST /v1/batch-mail/verify { code } → { verified, ref }

An agent onboarding vendors

Your agent adds new vendors to a verification batch and you approve the cost. When a vendor scans the code, batch.piece.confirmed reaches the agent's webhook with the vendor's id, and it updates your records.

create_batch_mail → confirm (your approval) → batch.piece.confirmed { piece.ref }

An address change before payouts move

Someone asks to change the address on an account. Hold the change, mail a code to the new address, and apply it only when the code comes back, so a takeover can't redirect checks, cards or shipments. One postcard is $3.05.

a batch of one postcard → batch.piece.confirmed → apply the change

Validation or verification?

They answer different questions, and most teams use both.

CheckWhat it tells you
Address validation softwareChecks that an address exists and can get mail, against USPS address data.When someone types an address in your form.
Mail verificationShows that someone at the address receives mail there, because they entered a code that only came by mail.Before money, goods or trust move to that address.
[Safeguards]

Built so a code can't be guessed or used twice

One-time

The first entry verifies the address. Entering the code again says it was already verified, and the alert is sent once.

It expires

After 30 days by default, or any 1 to 90 days you set, counted from the mail date. An expired code still counts a scan but never verifies.

Out of reach to guess

8 characters from a 31-character alphabet make about 853 billion codes, and typing is limited to 10 tries per network in 10 minutes at mailbox.bot/v and 120 checks a minute per account on the API.

Only your pieces

The verify call answers only for your own pieces in the key's environment, and an agent key only for its own batches. Another sender's codes don't exist for you.

Nothing about the device

A scan stores a count and the times. No IP address and no device details are kept, and link previews and crawlers aren't counted.

Postcard or letter

A postcard shows its code to anyone who handles it. When that matters, send a letter, from 10 pieces: the code travels inside the envelope.

[From your app or your agent]

One request to mail the codes, one call to check one

Over MCP from Claude, ChatGPT, your IDE or your agent harness, the same batch tools take qr.mode verify. A sandbox key (sk_agent_test_) runs it all for free and mails nothing.

POST/api/v1/batch-mailjson
POST /api/v1/batch-mail
Authorization: Bearer $MAILBOX_AGENT_KEY
X-Mailbox-MD-Version: 2
Idempotency-Key: sellers-2026-11-03

{
  "job_name": "Seller verification, 3 Nov",
  "mail_type": "postcard_4x6",
  "template_url": "https://example.com/verify-card-front.pdf",
  "recipients": [
    { "name": "Rivera Ceramics", "line1": "2214 Pico Blvd", "city": "Santa Monica",
      "state": "CA", "zip": "90405", "ref": "seller-48213" }
  ],
  "qr": { "mode": "verify", "url": "https://example.com/verified", "expires_days": 30 }
}
POST/api/v1/batch-mail/verifyjson
POST /api/v1/batch-mail/verify
Authorization: Bearer $MAILBOX_AGENT_KEY

{ "code": "k7d2 m9xq" }

200 OK
{ "verified": true, "already_verified": false, "batch_id": "b5f0…",
  "piece": 214, "ref": "seller-48213",
  "verified_at": "2026-11-06T15:02:40Z", "sandbox": false }
[Not a fit]

What a mailed code doesn't do

  • Identity verification or KYC: a code shows someone at the address gets mail, not who they are.
  • Proof of ownership, residency or a lease.
  • Logins or temporary accounts for your users.
  • Addresses outside the United States.
[Questions]

Address verification mail, answered

How does address verification by mail work?

You mail something to the address that only someone there can read, and ask them to enter it. We print a one-time code on each postcard or letter, mail it First-Class, check it the first time it's scanned or typed, and keep the record: it shows as Verified in your dashboard, and your agent can get a webhook alert with your own id for that address.

Is a mailed code enough to verify a business address?

It shows that someone at the address receives mail there within the code's life, which is what a business listing postcard checks. It doesn't show who they are or that they own the place, so pair it with your own checks of the business and the person.

Do recipients need an account or a login?

No. Holding the mail is the proof. They scan the code or type it at mailbox.bot/v or in your app, and nothing else is asked of them.

How long does a code last?

30 days by default, counted from the mail date; set qr.expires_days from 1 to 90. After that the code no longer verifies, and you can send a new piece with a new code.

Can a code be guessed?

Not in practice. A short code is 8 characters from 31 letters and digits, about 853 billion possibilities, and typing is limited to 10 tries per network in 10 minutes at mailbox.bot/v and 120 checks a minute per account on the API. Your key only ever sees your own pieces.

Should I send a postcard or a letter?

A postcard is cheaper ($1.05) and starts at one piece, but anyone who handles it can see the code. A letter ($1.15, from 10 pieces) carries the code inside the envelope.

Can people type the code into my own app?

Yes. Your app sends the code to POST /v1/batch-mail/verify with your key. The answer says verified, already_verified, the batch and piece, your ref and the time; a code that isn't yours returns 404 and an expired one 410.

What does my app receive?

batch.piece.confirmed when a piece is verified, with the batch and the piece: its number, your ref, the mode, the scan count and the times. batch.piece.scanned arrives on a piece's first scan. Both are signed and retried like every webhook, and go to your agent's callback too.

What if they never enter the code?

Nothing is sent and the code expires on its last day. The pieces list shows which pieces were verified, so you can send a new piece to the ones that weren't, or ask for another kind of proof.

Can I test it without mailing anything?

Yes. With a sandbox key (sk_agent_test_) the batch runs for free and nothing is printed. Sandbox verify pieces show their short code so you can rehearse the verify call, and POST /v1/batch-mail/{id}/advance with qr_event plays a scan or a confirmation and sends the webhook.

Is this the same as USPS address validation?

No. Validation checks an address against USPS data and tells you it exists. Mail verification tells you someone there gets mail. Most teams validate when the address is typed and verify by mail before payouts, shipments or a listing go live.

How much does it cost?

The codes, the checks and the webhooks are included in the batch price: $1.05 for a 4×6 postcard, from one piece with a $2.00 fee under 10, or $1.15 for a one-sheet letter, printing and First-Class postage included. One postcard on its own is $3.05.

[Related]

Keep reading

Holding the mail is the proof.

Send the addresses. We mail a one-time code to each, check every code that comes back, and show you who's verified.