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.
The primary SDK. Full TypeScript types, async/await, WebSocket support for real-time auth events.
Sync and async clients. Django and FastAPI integrations built-in. Type hints throughout.
Idiomatic Go. Context support, zero external dependencies, structured errors.
From zero to verified in 5 lines.
Pick your language. Copy the snippet. That's your entire integration surface.
Installation
Quickstart
import { Ovrtxt } from '@ovrtxt/sdk'; const auth = new Ovrtxt({ apiKey: process.env.OVRTXT_SECRET_KEY }); const session = await auth.verify({ phone: "+15550192834", brandName: "Joe's Gym", logoUrl: "https://joesgym.com/logo.png", 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);
Installation
Quickstart
from ovrtxt import Ovrtxt import os auth = Ovrtxt(api_key=os.environ["OVRTXT_SECRET_KEY"]) session = auth.verify( phone="+15550192834", brand_name="Joe's Gym", logo_url="https://joesgym.com/logo.png", webhook_url="https://api.joesgym.com/webhooks/ovrtxt", ) # session.id — correlate with webhook data.id # session.channel — 'rcs' or 'sms_fallback' # session.fallback_uri — render as CTA if sms_fallback print(f"Session {session.id} via {session.channel}")
Installation
Quickstart
package main import ( "context" "fmt" "os" ovrtxt "github.com/ovrtxt/ovrtxt-go" ) func main() { client := ovrtxt.NewClient(os.Getenv("OVRTXT_SECRET_KEY")) session, err := client.Verify(context.Background(), &ovrtxt.VerifyParams{ Phone: "+15550192834", BrandName: "Joe's Gym", LogoURL: "https://joesgym.com/logo.png", WebhookURL: "https://api.joesgym.com/webhooks/ovrtxt", }) if err != nil { panic(err) } fmt.Printf("Session %s via %s\n", session.ID, session.Channel) }
What happens next
Device Detection
Ovrtxt pings the carrier graph to determine if the destination number supports RCS. No polling. No waiting.
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.
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.
Handling the fallback URI in your frontend:
// Example: React component if (session.channel === 'sms_fallback') { return ( <a href={session.fallbackUri} className="btn-auth"> 🔒 Tap to verify via SMS </a> ); }
| Capability | Node.js | Python | Go | REST API |
|---|---|---|---|---|
| Initiate Verification | ✓ | ✓ | ✓ | ✓ |
| Poll Session Status | ✓ | ✓ | ✓ | ✓ |
| Cancel Session | ✓ | ✓ | ✓ | ✓ |
| Webhook Signature Verification | ✓ | ✓ | ✓ | Manual |
| Native TypeScript Types | ✓ | — | — | — |
| WebSocket Realtime Events | ✓ | Soon | Soon | — |
| Async / Await Support | ✓ | ✓ | Context | — |
| Auto-Retry with Backoff | ✓ | ✓ | ✓ | Manual |
| Usage / Billing Endpoint | ✓ | ✓ | ✓ | ✓ |
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.