Zero impact on your page speed

Add OTP numbers to
any site in 60 seconds.

One async script tag. Opens as a modal overlay. Your page stays at full speed โ€” our widget only loads when a user clicks.

0ms page load impactNo cookies until clickedWorks on any stackAuto-refund if no OTP

Live Demo

Click the button below โ†“
Live demo โ€” this is exactly what your users see
๐Ÿ“งtemp-inbox.example.com

Waiting for verification email?

Sometimes services require a phone number instead.

Select service

Instant ยท From $0.07 ยท Auto-refunded if unused

Inline Embed Demo

Drop the widget directly into your page โ€” no modal, no click required. Perfect for temp mail sidebars.

Live โ€” real widget
tempinbox.io
Inbox2
x7k9m@tempinbox.io

Your Instagram login code

no-reply@instagram.com

Waiting for the SMS verification emailโ€ฆ

Need a phone number instead?

Temp mail split layout

html
<!-- Temp mail layout: inbox left, OTP widget right -->
<div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap">

  <!-- Your inbox column -->
  <div style="flex:1;min-width:280px">
    <!-- ...your inbox UI here... -->
  </div>

  <!-- NumberOTP inline widget -->
  <div style="width:340px;flex-shrink:0">
    <iframe
      src="https://widget.numberotp.com/?ref=YOUR_REF_ID"
      width="100%"
      height="560"
      frameborder="0"
      loading="lazy"
      style="border-radius:16px;border:1px solid #e5e7eb;display:block"
      title="Get OTP Number"
    ></iframe>
  </div>

</div>

Standalone inline embed

html
<!-- Inline embed โ€” widget lives directly on your page, no modal -->
<iframe
  src="https://widget.numberotp.com/?ref=YOUR_REF_ID"
  width="100%"
  height="580"
  frameborder="0"
  loading="lazy"
  style="border-radius:16px;border:1px solid #e5e7eb;display:block"
  title="Get OTP Number"
></iframe>

Quick Start

Two lines and you're done.

1

Add the script to your page (once)

html
<!-- 1. Add once to your <head> or before </body> -->
<script async src="https://numberotp.com/widget.js"></script>
2

Add a button anywhere on your page

html
<!-- 2. Any button triggers the widget -->
<button onclick="NumberOTP.open()">
  Get OTP Number
</button>

How it works: The script tag is async โ€” it never blocks your page render. It registers window.NumberOTP and sits idle. When a user clicks your button, only then does the widget open โ€” your page is never affected.

Integration Methods

Basic button โ€” opens modal widget

html
<!-- 2. Any button triggers the widget -->
<button onclick="NumberOTP.open()">
  Get OTP Number
</button>

Pre-select a service โ€” one less click for users

html
<!-- Pre-select a service (e.g. WhatsApp) -->
<button onclick="NumberOTP.open({ service: 'wa' })">
  Get WhatsApp OTP
</button>

<!-- Other service codes: tg (Telegram), go (Google),
     ig (Instagram), fb (Facebook), tt (TikTok) -->

With callbacks โ€” track conversions

js
<button id="otp-btn">Get OTP Number</button>

<script async src="https://numberotp.com/widget.js"></script>
<script>
  document.getElementById('otp-btn').addEventListener('click', function() {
    NumberOTP.open({
      service: 'wa',        // pre-select service
      ref: 'YOUR_REF_ID',  // your affiliate ID for revenue share
      onSuccess: function(data) {
        console.log('Number obtained:', data);
        // e.g. show it in your UI
      },
      onClose: function() {
        console.log('Widget closed');
      }
    });
  });
</script>

Site-Specific Guides

Recommended

Temp mail sites are our highest-converting partners โ€” users are already waiting for a verification code.

Why temp mail sites convert best:

Users visit temp mail sites specifically because they need to verify an account without exposing their real email or phone. Adding a NumberOTP CTA right next to the inbox means you're catching users at exactly the moment they need a phone number โ€” highest intent, lowest friction.

Drop-in snippets (replace YOUR_REF_ID):

html
<!-- Perfect placement: next to the inbox, where users wait for OTP -->
<script async src="https://numberotp.com/widget.js"></script>

<!-- Option A: sidebar CTA -->
<div style="border:1px solid #e5e7eb;border-radius:12px;padding:16px;
            background:#fafafa;text-align:center;margin-bottom:16px">
  <p style="margin:0 0 8px;font-size:13px;font-weight:600;color:#111">
    Need a real phone number?
  </p>
  <p style="margin:0 0 12px;font-size:12px;color:#666">
    Get a temporary number for SMS verification โ€” instant, private, refunded if unused.
  </p>
  <button
    onclick="NumberOTP.open({ ref: 'YOUR_REF_ID' })"
    style="width:100%;background:#000;color:#fff;border:none;border-radius:8px;
           padding:10px 16px;font-size:13px;font-weight:700;cursor:pointer">
    Get OTP Number
  </button>
</div>

<!-- Option B: inline banner after checking inbox -->
<div onclick="NumberOTP.open({ ref: 'YOUR_REF_ID' })"
     style="cursor:pointer;border:1px solid #e5e7eb;border-radius:8px;
            padding:10px 14px;display:flex;align-items:center;gap:10px;
            background:#fff;margin-top:8px">
  <span style="font-size:20px">๐Ÿ“ฑ</span>
  <div>
    <p style="margin:0;font-size:12px;font-weight:700;color:#111">Need a phone number instead?</p>
    <p style="margin:0;font-size:11px;color:#666">Instant SMS numbers โ€” from $0.07</p>
  </div>
  <span style="margin-left:auto;font-size:11px;font-weight:600;color:#000">โ†’</span>
</div>

Best placement

Sidebar next to the inbox, or below the "Generate email" button

Best copy

"Need a phone number too?" or "Get OTP via SMS instead"

Conversion tip

Show the button after user checks inbox at least once โ€” higher intent

Revenue

Get high upfront commission through your link

NumberOTP.open() Options

All options are optional.

OptionTypeDescription
servicestringPre-select a service code (wa, tg, go, ig, fb, tt, am, dcโ€ฆ)
countrystringPre-select a country by numeric ID (e.g. "12" = US, "22" = India)
refstringYour affiliate / partner ID โ€” earns you revenue
theme"light" | "dark"Force light or dark theme (default: follows system preference)
onSuccessfunctionCalled when user gets a number โ€” receives order data object
onClosefunctionCalled when the widget is dismissed
onOpenfunctionCalled immediately when the widget opens

data-numberotp Attributes

For zero-JS wiring โ€” hover preload included automatically.

AttributeDescription
data-numberotpAuto-wire this button โ€” no onclick needed. Script handles click + hover preload.
data-serviceService code to pre-select (same as service option above)
data-refYour affiliate ID
data-themeForce theme: "light" or "dark"

Popular Service Codes

WhatsAppwa
Telegramtg
Googlego
Instagramig
Facebookfb
TikToktt
Appleap
Amazonam
Discorddc
Uberub
Twitter/Xtw
LinkedInli
YouTubeyt
Spotifysp
Netflixnf
Microsoftmm

Click any row to copy the code. 800+ services available โ€” browse all.

Ready to monetize your traffic?

Join our affiliate program, get your ref ID, and start earning on every order your visitors place.