Limited registrations open — claim your spot
minimoth

Supabase

Deliver Supabase Auth's phone OTPs over WhatsApp first, SMS fallback, for Indian numbers — at MiniMoth's rate, with zero changes to your application code.

How it fits together

Supabase Auth already owns the entire OTP lifecycle — it generates the code, verifies it, and issues the session. MiniMoth becomes the delivery backend Supabase calls out to via its Send SMS Hook. Your own application code doesn't change:

// This doesn't change when you add MiniMoth
const { error } = await supabase.auth.signInWithOtp({ phone })
MiniMoth never sees the Supabase session or the verification step — only the outbound SMS-hook call Supabase makes when it needs an OTP delivered. This is a delivery-backend integration, not an auth provider swap.

Setup

Wire up test mode first — it confirms the connection without sending a real message or touching your balance.

  1. MiniMoth dashboard — open your project, find the Supabase Hook card, and click Enable Supabase Hook. Copy the Test Hook URL and Secret. The Supabase Hook card in the MiniMoth dashboard, before it's enabled, with an Enable Supabase Hook button
  2. Supabase dashboard — go to Authentication → Hooks → Send SMS hook, choose HTTPS, paste the test URL and secret, and save. Supabase's Auth Hooks dashboard page, with the Add a new hook menu open showing the Send SMS hook option
  3. Verify the connection — trigger signInWithOtp() from your app, then check Supabase's own Auth logs for a successful call. Test mode sends no real message, so this is the only way to confirm the hook is wired correctly — MiniMoth's own Playground can't substitute for it here, since Supabase owns the request.

    No app to test from yet? Paste this into a scratch file:

    import { createClient } from '@supabase/supabase-js'
    const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)
    
    // 1. Send — this is what calls MiniMoth's hook
    await supabase.auth.signInWithOtp({ phone: '+919876543210' })
    
    // 2. Verify — the code the user received
    await supabase.auth.verifyOtp({ phone: '+919876543210', token: '123456', type: 'sms' })
  4. Go live — repeat steps 1–2 with the Live Hook URL and Secret. This is also the only way to see a real OTP actually delivered, since test mode by design never sends one.

Billing

Real OTPs sent via the live hook are billed to your wallet balance at send time, at the same default rate (₹0.35) as calling the API directly. Test-mode calls cost nothing and consume no credits.

Try the full OTP flow interactively in the sandbox — no SMS sent, no credits consumed. The same Playground also has a live test to send a real OTP to your phone (uses your credits).

Test in Playground →