Let your users verify with NumberBox numbers
Connect your website in a few minutes. When a user signs up with one of our virtual numbers, your OTP goes straight to their NumberBox screen — no SMS cost, no delay. Every other number works exactly as today.
Four steps, all automatic
User gets a number
Your user rents or buys a virtual number on NumberBox (for example +1 (202) 555-0103).
Signs up on your site
They enter that number on your sign-up or "verify phone" form, like any other number.
Your site asks us first
Before sending an SMS, your site sends the OTP to our Connect API. We answer in milliseconds: "ours" or "not ours".
The code appears
If it's ours, the user sees the code on NumberBox at once. If not, you send your normal SMS — nothing changes.
No SMS cost
OTPs to our numbers are not real SMS — you pay nothing for them.
Instant
Delivered in under a second, never lost by a carrier.
Private & safe
We accept an OTP only for a number a user holds right now. Messages for other numbers are never stored.
Nothing breaks
If our API is slow or down, your site just sends the normal SMS.
Two ways to connect
First, ask us for your connect key. Then pick one:
A. Add a few lines to your SMS function
Most sites have one function that sends every SMS. Put this at the top of it. Our numbers go to us; everything else continues as before.
// Laravel: before your normal SMS code function send_sms($to, $message) { try { $r = Http::timeout(5) ->withHeaders(['X-Connect-Key' => env('NUMBERBOX_KEY')]) ->post('https://number.joggotabd.com/api/connect/sms', ['to' => $to, 'text' => $message]); if ($r->json('ours')) { return; // a NumberBox number: done, no SMS needed } } catch (\Throwable $e) { // our API not reachable: just send the normal SMS } // ... your normal SMS sending stays here ... }
async function sendSms(to, message) { try { const r = await fetch('https://number.joggotabd.com/api/connect/sms', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Connect-Key': process.env.NUMBERBOX_KEY }, body: JSON.stringify({ to, text: message }), signal: AbortSignal.timeout(5000), }); if ((await r.json()).ours) return; // handled by NumberBox } catch (e) { /* fall back to normal SMS */ } // ... your normal SMS sending ... }
curl -X POST https://number.joggotabd.com/api/connect/sms \ -H "X-Connect-Key: pk_your_key" \ -d to=+12025550103 \ -d text="Your verification code is 482913" # {"ok":true,"ours":true,"delivered":true} → done # {"ok":true,"ours":false,"delivered":false} → send your normal SMS
B. Change one setting
If your admin panel has an "SMS API URL" with {{number}} and {{message}}, replace it with:
https://number.joggotabd.com/api/connect/sms?key=pk_your_key&to={{number}}&text={{message}}
Tell us your old SMS URL when you get the key. Messages for our numbers stay with us; we pass every other message on to your old gateway, so all your users still get their SMS.
Connect API
Base URL https://number.joggotabd.com/api/connect. Send your key in the X-Connect-Key header (or a key field). Phone numbers may have spaces, dashes or a + sign; the country code is best.
| Call | Send | Answer |
|---|---|---|
| POST /sms | to, textGET also works, for URL-based SMS systems. |
ours — is it our numberdelivered — the user can see it nowreason: not_in_use — ours, but nobody holds it now (not stored)forwarded — no-code mode: sent on to your old gateway |
| GET /check | phone | ours, in_use — check a number without sending anything |
| GET /ping | — | ok and your site name — to test your key |
Limits: 600 calls per minute per site. Wrong key → HTTP 401. Missing fields → HTTP 422.
For your team
Ready to connect?
Ask us for a connect key. Most sites are live the same day.