Open Source Official SDKs, maintained by the Ovrtxt team

SDKs & Libraries

Integrate Ovrtxt into your stack in minutes. Our SDKs abstract away carrier routing, device detection, and webhook signature verification — leaving your team to focus on what matters.

JS
Stable

Node.js

The primary SDK. Full TypeScript types, async/await, WebSocket support for real-time auth events.

npm install @ovrtxt/sdk
v2.4.1 · GitHub → · npm →
Py
Stable

Python

Sync and async clients. Django and FastAPI integrations built-in. Type hints throughout.

pip install ovrtxt
v1.9.0 · GitHub → · PyPI →
Go
Stable

Go

Idiomatic Go. Context support, zero external dependencies, structured errors.

go get github.com/ovrtxt/ovrtxt-go
v1.3.2 · GitHub → · pkg.go.dev →
💎
Ruby
Beta
🐘
PHP
Beta
☕
Java
Beta
📱
React Native
Beta
🌐
REST API
Always

Quickstart

From zero to verified in 5 lines.

Pick your language. Copy the snippet. That's your entire integration surface.

Installation

npm install @ovrtxt/sdk

Quickstart

verify.js
import { Ovrtxt } from '@ovrtxt/sdk';

const auth = new Ovrtxt({
  apiKey: process.env.OVRTXT_SECRET_KEY
});

const session = await auth.verify({
  phone: "+15550192834",
  accountId: "acct_01HZXVK29S8T4MFQNPQ7RBK93A",
  brandId: "brd_01HZXVK29S8T4MFQNPQ7RBK93B",
  clientChallenge: "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
  webhookUrl: "https://api.joesgym.com/webhooks/ovrtxt"
});

// session.id — use to correlate the webhook event
// session.fallbackUri — render this as your CTA if channel = sms_fallback
console.log(session.id, session.channel);

What happens next

1

Device Detection

Ovrtxt pings the carrier graph to determine if the destination number supports RCS. No polling. No waiting.

2

RCS or Fallback URI

If RCS-capable: a branded rich card fires instantly. If not: session.fallbackUri contains the OS deep link — render it as a button on your login page.

3

Webhook or Poll

When the user taps Send, your webhookUrl receives a signed verification.completed event. Alternatively, poll GET /v1/verify/{id}.

✓

User is Authenticated

Total wall-clock time: under 800ms average. Zero outbound OTP exposure. Zero bot attack surface.

End-to-End Zero-Knowledge Verification Pattern

// 1. Frontend (Browser): Generate secret & hash commitment
const clientSecret = crypto.randomUUID();
const clientChallenge = await sha256(clientSecret);
sessionStorage.setItem('ovrtxt_secret', clientSecret);

// 2. Backend: Start verification session via Ovrtxt SDK
const session = await auth.verify({
  phone: req.body.phone,
  accountId: process.env.OVRTXT_ACCOUNT_ID,
  brandId: process.env.OVRTXT_BRAND_ID,
  clientChallenge: req.body.clientChallenge
});

// 3. Backend (Final Auth): Retrieve session & validate cryptographic proof
const activeSession = await auth.getSession(req.body.sessionId);
const e2e_validation = sha256(req.body.clientSecret) === activeSession.clientChallenge;

if (activeSession.status === 'approved' && e2e_validation) {
  issueUserSessionCookie(res, activeSession.phone); // 🔒 Mathematically verified
}

Handling the fallback URI in your frontend:

// React / Mobile component
if (session.channel === 'sms_fallback') {
  return (
    <a href={session.fallbackUri} className="btn-auth">
      🔒 Tap to verify via SMS
    </a>
  );
}

Feature Coverage by SDK

Capability Node.js Python Go REST API
Initiate Verification✓✓✓✓
Poll Session Status✓✓✓✓
Cancel Session✓✓✓✓
Webhook Signature Verification✓✓✓Manual
Native TypeScript Types✓———
WebSocket Realtime Events✓SoonSoon—
Async / Await Support✓✓Context—
Auto-Retry with Backoff✓✓✓Manual
Zero-Knowledge Client Binding✓✓✓✓
Usage / Billing Endpoint✓✓✓✓

Missing your language?

All our SDKs are open source. If you're working with a stack we don't support yet, file a GitHub issue or submit a PR — our team reviews contributions within 48 hours.

⭐

Star us on GitHub

Be notified when new SDK versions ship

💬

Join Developer Slack

Get help from the Ovrtxt team in real-time

📖

Read the Changelog

Every release. Every breaking change. Documented.