Every synthetic-monitoring tool (Checkly, Pingdom, Better Stack, Datadog Synthetics) can tell you your signup endpoint responded correctly. None of them tell you whether the SMS or email your OTP provider promised to send actually showed up in a real inbox or a real phone — or how long it took. You usually find out the same way your users do: a support ticket, or a spike in abandoned signups you can't explain.
So I built otp-watch — a small hosted service that answers exactly that question, live at https://otpwatch.flo-voice1.com.
How it works
You ask it for a real target, trigger your own verification send to it (same as you would for a real user), then poll for what happened:
# get a key, no signup
curl -X POST https://otpwatch.flo-voice1.com/keys \
-H "Content-Type: application/json" -d '{"email":"you@example.com"}'
# start a check
curl -X POST https://otpwatch.flo-voice1.com/checks \
-H "Authorization: Bearer otpw_..." \
-H "Content-Type: application/json" \
-d '{"channel":"sms","timeoutSeconds":120}'
# => {"id":"...", "target":"+447...", "status":"pending"}
# now trigger your own OTP send to that number/address, then poll:
curl https://otpwatch.flo-voice1.com/checks/<id> -H "Authorization: Bearer otpw_..."
# => {"status":"received", "latencyMs":4213}
channel is sms (a real UK phone number) or email (a real disposable mailbox). Whichever you pick, otp-watch doesn't touch your app at all — it just answers "did anything arrive at this target, and when."
What it deliberately doesn't do
- No scheduling — bring your own cron/CI. A GitHub Actions job that runs every 30 min and fails on
timed_outis the alerting; I didn't want to rebuild PagerDuty for v1. - No webhooks yet — you poll
GET /checks/:id. - SMS is UK-only for now (real GOIP hardware behind it, not a VoIP/virtual number — same infrastructure as sms-florin).
- No billing yet. It's free while unproven — each SMS check rents a real number, so the cost is real, just absorbed on my side for now.
Scoped this tightly on purpose (built in about a day) rather than a full monitoring platform — happy to extend it (more countries, webhooks, scheduling) if there's real interest.
If you're also testing signup flows with an AI agent, agent-identity-mcp uses the same underlying phone/email primitives from the agent side — disposable identity for testing vs. delivery monitoring for production are two sides of the same infrastructure.
Repo: https://github.com/flovoice53-tech/otp-watch
Live: https://otpwatch.flo-voice1.com
Top comments (0)