# Reliability, feedback loop and billing

Cost controls, a bounce feedback loop with measured accuracy, credit packs, async settling, and Turnstile.

Date: 2026-09-02

- A shared mailbox answer cache across customers, so the same address is probed once.
- Bulk runs process in chunks, and each chunk writes its own part file before results are stitched.
- Provider balance alerts warn before the mailbox partner runs dry.
- Six `@spaw.test` test addresses answer fixed verdicts at no cost and are never logged.
- Every response carries `X-Request-Id`, repeated in `meta.request_id` and `error.request_id`.
- Publishable keys accept a daily credit cap (`429 KEY_SPEND_CAP_REACHED` once it is spent).
- A circuit breaker keeps a struggling mailbox provider from slowing every lookup.
- Batch requests send their mailbox probes concurrently.
- A bounce feedback API (`POST /v1/email/feedback`) and webhook targets for Postmark, Amazon SES, Mailgun, and SendGrid; bounces join the suppression list, deliveries clear it, and the dashboard shows measured accuracy.
- `smtp_checked_at`, the 27th response field, records when the mailbox was last probed.
- Catch-all domains are remembered for a week, and an account's own delivered addresses count as verified for 90 days.
- Credit packs are sold through Stripe Checkout from the Billing page.
- `callback_url` and `callback_secret` on a lookup re-check an unverified answer after 5 and 20 minutes and POST the settled verdict, signed.
- Bulk uploads keep the file's own columns, add the verdict columns, and offer `?variant=deliverable|risky|undeliverable` downloads.
- Publishable keys can require a Cloudflare Turnstile token per lookup.

Reference: https://spaw.co/changelog/2026-09-02-reliability-feedback-loop-and-billing
