Passwordless login via WhatsApp, Passkey, OneID & Reverse SMS — plus turn any user's device into a trusted authenticator for signed, reason-based approvals on payments, orders and sensitive actions.
The first device a user authenticates on automatically becomes a Trusted Device. Every future login from a new device, every sensitive action, every passkey registration — approved on the device the user already has. No separate authenticator app. No security key. No SMS.
Stop rolling your own "confirm with OTP" for payments. RAuth issues signed, session-bound OTKs that cryptographically bind the user's intent to the exact action — amount, recipient, reason, all hashed before signing.
paymentTransfer) and the canonical metadata — amount, recipient, account number.RAuthProvider.verifyApproval() checks the metadata hash, session binding, tenant ID and expiry — then you execute.Each usecase ships with a canonical metadata schema so your approvals can't be tampered with — only the declared fields are signed.
If the user doesn't have OneID installed, the app itself is the authenticator. If the trusted device is offline, we gracefully fall back — without losing security guarantees.
Click each step to see how RAuth eliminates password friction while keeping enterprise-grade security.
Join 3,000+ developers already building with RAuth. Free tier available, no credit card required.
Zero boilerplate. One import. Your auth is live.
import { RAuth } from 'rauth-node'; const rauth = new RAuth({ apiKey: process.env.RAUTH_API_KEY, method: 'whatsapp', // or 'passkey' | 'oneid' }); // Initialize auth session app.post('/auth/init', async (req, res) => { const { sessionToken, expiresIn } = await rauth.createSession({ phone: req.body.phone, ipAddress: req.ip, deviceId: req.headers['x-device-id'], }); res.json({ sessionToken, expiresIn }); }); // Verify OTP & get JWT app.post('/auth/verify', async (req, res) => { const { jwt, trustScore, user } = await rauth.verifySession({ sessionToken: req.body.sessionToken, otp: req.body.otp, }); res.json({ jwt, trustScore, user }); });
import { RAuthProvider, useRAuth } from '@rauth/react'; // Wrap your app function App() { return ( <RAuthProvider apiKey="rauth_live_sk_..."> <YourApp /> </RAuthProvider> ); } // Use in any component function LoginButton() { const { signIn, user, loading } = useRAuth(); return ( <button onClick={() => signIn({ method: 'whatsapp' })}> {loading ? 'Sending OTP...' : 'Login with WhatsApp'} </button> ); }
# Initialize session POST https://api.rauth.io/v1/sessions Headers: Authorization: Bearer rauth_live_sk_... Content-Type: application/json Body: { "phone": "+919644282947", "method": "whatsapp", "device_id": "d_abc123xyz" } # Response { "session_token": "st_9xKj...", "expires_in": 60, "delivery": "whatsapp" } # Verify OTP POST https://api.rauth.io/v1/sessions/verify { "session_token": "st_9xKj...", "otp": "742916" } # Response: Signed JWT + trust score
Real-time analytics, fraud alerts, and trust score tracking — all in one dashboard.
Every login passes through 3 AI-powered layers — making it virtually impossible for bad actors to slip through.
| Feature | Passwords | SMS OTP | ⚡ RAuth |
|---|---|---|---|
| Phishing Resistant | ✗ | ✗ | ✓ |
| SIM-Swap Proof | ✗ | ✗ | ✓ |
| Zero Password Storage | ✗ | ~ | ✓ |
| Passwordless UX | ✗ | ~ | ✓ |
| AI Fraud Detection | ✗ | ✗ | ✓ |
| Device Fingerprinting | ✗ | ✗ | ✓ |
| WhatsApp Delivery | ✗ | ✗ | ✓ |
| GDPR / SOC 2 Ready | ~ | ~ | ✓ |
| Trusted Device as Authenticator | ✗ | ✗ | ✓ |
| Signed Reason-Based Approvals (OTK) | ✗ | ✗ | ✓ |
| Number-Match Anti-Phishing | ✗ | ✗ | ✓ |
| Real-Time Session Revocation (SSE) | ✗ | ✗ | ✓ |
| Multi-Tenant WhatsApp Business | ✗ | ✗ | ✓ |
| Dual KYC (Tenant + End-User) | ✗ | ✗ | ✓ |
| SDK Integration Time | Days | Hours | 15 min |
| Auth Time | ~8s | ~30s | ~1.2s |
From flagship smartphones to ₹999 feature phones — RAuth reaches every user.
RAuth handles the complexity. You focus on what matters.
We started RAuth because we were tired of the status quo.
Passwords are a 40-year-old technology protecting a 21st-century world. Our team of ex-Google, ex-Microsoft, and security researchers built RAuth to make passwordless the default.
initApproval, we canonicalize the metadata (amount, recipient, reason…), HMAC it with your tenant secret, and bind the token to session_id + tenant_id + approval_id. The user sees the actual amount and recipient on their trusted device — not a vague "Approve?" prompt — and confirms with biometric + number match. Your backend verifies the token with one SDK call and the metadata hash detects any tampering before execution.revokeSession (or a user revokes from their account dashboard), the event reaches your servers in under 100 ms — no polling, no JWT-expiry window. Our SDKs drop the session immediately and the next request from that token fails with session_revoked.Join 3,000+ developers in the queue. First 100 get free tier forever.
Our team responds within a few hours. Have a demo request? We'll set it up same day.