PurpleCallio

Early access · Live Translate

Talk to anyone on a call, in their own language.

Two-way voice translation and captions for 1:1 calls, built so possible misunderstandings get flagged, costs stay predictable and quality is measurable. One flag on your call, 60 languages.

Early access: features, languages and pricing may change before general availability.

The problem

Why translation alone isn't enough

In healthcare, sales and support, the costly mistakes are rarely whole sentences. They're a wrong amount, a changed name or a misheard term that nobody notices until later.

Amounts and dates

“₹2,450” heard as “₹2,540”, or Tuesday heard as Thursday. Small slips like these lose money and trust.

Names and terms

Product names, medicines and legal terms get “translated” into ordinary words, or mangled.

Nobody can tell

With translation alone, neither person can see what the other actually said, so mistakes go unnoticed.

How it works

Three steps, no pipeline to build

  1. 1

    Set each person's language

    Pass callerLanguage and receiverLanguage when you create the call, or let each person pick “I speak” in the call. Use auto to detect it.

  2. 2

    Talk normally

    Each person speaks in their own language, including code-mixed speech like Spanglish or Hinglish. PurpleCallio runs speech recognition, translation and voice on the server.

  3. 3

    Each hears and reads the other

    The listener hears a translated voice a short moment behind the speaker, with the original voice turned down, and both see DualView captions.

Seven features

More than a translation toggle

All seven are part of early access and roll out to early-access accounts in stages.

01 · Understand

DualView Translation

Original and translated captions, side by side

See what was said and what was heard, side by side.

Why it matters: If a translation looks wrong, either person can compare it with the original words straight away instead of trusting the AI blindly.

02 · Understand

PurpleLex

Custom business vocabulary for translation

Your brand, people and industry terms, kept the way you define them.

Why it matters: Generic translation struggles with product names and specialist terms. A reusable glossary keeps them consistent, and MeaningGuard flags any that still come through changed.

POST /calls · translation
"lexiconId": "lex_123",
"context": {
  "industry": "healthcare",
  "purpose": "post-surgery follow-up",
  "roles": { "caller": "doctor", "receiver": "patient" }
}

03 · Understand

Translation UI Kit

Drop-in multilingual call components

A multilingual call screen without building the UI yourself.

Why it matters: Split views, language pickers, non-Latin scripts and right-to-left text are already handled, so you ship the feature instead of the plumbing.

04 · Trust

MeaningGuard

Misunderstanding detection and recovery

Catch a possible misunderstanding before it costs you.

Why it matters: It flags phrases that may be misunderstood, like a changed amount, date or name, so people can check, ask to repeat and move on.

POST /calls · translation
"guard": {
  "enabled": true,
  "sensitivity": "standard",
  "replay": false   // replay of original audio is off by default
}

05 · Trust

Post-Call Suite

Multilingual transcript, summary and action items after every call

Every call ends with notes, in everyone's language.

Why it matters: Opt-in: get a synced transcript, a summary in each person's language and action items as one JSON payload, without building a recording pipeline.

report.http
"postCallReport": true

// after the call
GET /calls/:id/translation-report
→ { "status": "ready", "transcript": [...], "summary": {...},
    "signals": {...}, "creditsCharged": 40 }

06 · Control

Translation Observability

Latency, quality and cost metrics for translation

Know when translation is slow, failing or expensive.

Why it matters: Knowing a call connected isn't enough. See translation delay, provider failures, flag rates and cost per minute by language pair.

metrics.http
GET /translation/metrics?from=2026-10-01&to=2026-10-31&pair=mr-en

{ "totals":   { "calls": 412, "voiceMinutes": 3820, "captionsMinutes": 640, ... },
  "latency":  { "firstAudioMsP50": ..., "captionDelayMsP95": ... },
  "guard":    { "flags": 37, "byReason": { "term_mismatch:amount": 9 }, ... },
  "byPair":   [ { "pair": "mr-en", "route": "soniox", ... } ] }

07 · Control

CostGuard

Usage budgets and cost limits for AI calls

Know what a translated call costs before you scale.

Why it matters: Per-call limits and project budgets are enforced on the server. When a limit is reached, translation steps down or pauses; the call itself keeps going.

POST /calls · translation
"maxMinutes": 30,                // per-call translation limit
"onLimit": "captions_then_off"   // voice → captions → off; the call continues

60 languages

Built for how the world actually talks

Regional accents, code-mixed speech (Spanglish, Hinglish, Taglish and more) and everyday colloquial speech, not just formal text. Every language supports voice and captions, and any one can be translated into any other.

Powered by Soniox.

  • Afrikaans

    Afrikaans

    VoiceCaptions
  • Shqip

    Albanian

    VoiceCaptions
  • العربية

    Arabic

    VoiceCaptions
  • Azərbaycanca

    Azerbaijani

    VoiceCaptions
  • Euskara

    Basque

    VoiceCaptions
  • Беларуская

    Belarusian

    VoiceCaptions
  • বাংলা

    Bengali

    VoiceCaptions
  • Bosanski

    Bosnian

    VoiceCaptions
  • Български

    Bulgarian

    VoiceCaptions
  • Català

    Catalan

    VoiceCaptions
  • 中文

    Chinese

    VoiceCaptions
  • Hrvatski

    Croatian

    VoiceCaptions
  • Čeština

    Czech

    VoiceCaptions
  • Dansk

    Danish

    VoiceCaptions
  • Nederlands

    Dutch

    VoiceCaptions
  • English

    English

    VoiceCaptions
  • Eesti

    Estonian

    VoiceCaptions
  • Suomi

    Finnish

    VoiceCaptions
  • Français

    French

    VoiceCaptions
  • Galego

    Galician

    VoiceCaptions
  • Deutsch

    German

    VoiceCaptions
  • Ελληνικά

    Greek

    VoiceCaptions
  • ગુજરાતી

    Gujarati

    VoiceCaptions
  • עברית

    Hebrew

    VoiceCaptions
  • हिन्दी

    Hindi

    VoiceCaptions
  • Magyar

    Hungarian

    VoiceCaptions
  • Bahasa Indonesia

    Indonesian

    VoiceCaptions
  • Italiano

    Italian

    VoiceCaptions
  • 日本語

    Japanese

    VoiceCaptions
  • ಕನ್ನಡ

    Kannada

    VoiceCaptions
  • Қазақша

    Kazakh

    VoiceCaptions
  • 한국어

    Korean

    VoiceCaptions
  • Latviešu

    Latvian

    VoiceCaptions
  • Lietuvių

    Lithuanian

    VoiceCaptions
  • Македонски

    Macedonian

    VoiceCaptions
  • Bahasa Melayu

    Malay

    VoiceCaptions
  • മലയാളം

    Malayalam

    VoiceCaptions
  • मराठी

    Marathi

    VoiceCaptions
  • Norsk

    Norwegian

    VoiceCaptions
  • فارسی

    Persian

    VoiceCaptions
  • Polski

    Polish

    VoiceCaptions
  • Português

    Portuguese

    VoiceCaptions
  • ਪੰਜਾਬੀ

    Punjabi

    VoiceCaptions
  • Română

    Romanian

    VoiceCaptions
  • Русский

    Russian

    VoiceCaptions
  • Српски

    Serbian

    VoiceCaptions
  • Slovenčina

    Slovak

    VoiceCaptions
  • Slovenščina

    Slovenian

    VoiceCaptions
  • Español

    Spanish

    VoiceCaptions
  • Kiswahili

    Swahili

    VoiceCaptions
  • Svenska

    Swedish

    VoiceCaptions
  • Tagalog

    Tagalog

    VoiceCaptions
  • தமிழ்

    Tamil

    VoiceCaptions
  • తెలుగు

    Telugu

    VoiceCaptions
  • ไทย

    Thai

    VoiceCaptions
  • Türkçe

    Turkish

    VoiceCaptions
  • Українська

    Ukrainian

    VoiceCaptions
  • اردو

    Urdu

    VoiceCaptions
  • Tiếng Việt

    Vietnamese

    VoiceCaptions
  • Cymraeg

    Welsh

    VoiceCaptions

Every language supports captions and voice, and any language can be translated into any other.

Use cases

Where a shared language is missing

Telehealth

A doctor in Pune and a patient who speaks Tamil talk directly. Medicine names stay intact, and a changed dose gets flagged.

Marketplaces and gig platforms

A buyer and a seller, or a customer and a delivery partner, sort out an address or a price without a shared language.

Edtech tutoring

A tutor teaches in English while the student hears Hindi, and both can check the original words when a concept is unclear.

Support and sales

An English-speaking agent helps a customer in Marathi. PurpleLex keeps plan and product names right, and the call ends with notes.

Compare

Build it yourself, or have it built in

Most calling SDKs give you audio and video. Translation is usually left for you to assemble from separate providers. Here's what that means, next to what comes with Live Translate.

  • Voice and captions

    Building it yourself: Wire speech recognition, translation and speech synthesis providers into your media pipeline.

    With PurpleCallio: Built inTurn on one flag per call; voice and captions just work.

  • Original next to translation

    Building it yourself: Sync two text streams and build the side-by-side view yourself.

    With PurpleCallio: DualView TranslationTime-synced original and translated captions.

  • Company vocabulary

    Building it yourself: Maintain prompt hacks or glossaries per provider.

    With PurpleCallio: PurpleLexOne reusable glossary for brand names and industry terms.

  • Catching misunderstandings

    Building it yourself: No signal when a number, date or name changes in translation.

    With PurpleCallio: MeaningGuardFlags risky phrases with replay and ask-to-repeat.

  • Latency and quality

    Building it yourself: Instrument every provider hop yourself.

    With PurpleCallio: Translation ObservabilityDelay, failures and flag rates by language pair.

  • Cost control

    Building it yourself: Several provider bills and no per-call limits.

    With PurpleCallio: CostGuardBudgets and per-call limits enforced on the server.

  • Notes after the call

    Building it yourself: Record, store and process audio in a separate pipeline.

    With PurpleCallio: Post-Call SuiteTranscript, summary and action items in each language (opt-in).

  • Call screen

    Building it yourself: Build pickers, split views and right-to-left layouts from scratch.

    With PurpleCallio: Translation UI KitDrop-in components for React, Vue, Svelte and more.

  • Languages

    Building it yourself: Coverage and pricing change with each provider you add.

    With PurpleCallio: 60 languagesAny to any, with voice and captions in every language.

  • Pricing

    Building it yourself: Per-provider bills on top of your calling platform.

    With PurpleCallio: One simple ratePer minute, per person translating, from one credit balance.

Live Translate features are in early access.

Pricing

One rate per minute for each person who has translation on (one side 1×, both sides 2×), in credits from your prepaid balance. Same-language calls aren't charged for translation. Rates are set by PurpleCallio and shown here and in your dashboard.

Voice translation
Loading current rate…
Translated captions
Loading current rate…
Estimate costs with the CostGuard calculator

Privacy and trust

  • No audio or transcript storage by default. Audio is streamed to the translation provider for the call and not stored by PurpleCallio.
  • Replay of the original audio is off by default. A project can opt in; the buffer then lives in memory only (about 30 seconds), is cleared at the end of the call, and both people see a “Replay enabled” indicator.
  • Transcripts are kept only if you turn on the Post-Call Suite, with redaction and the retention period you choose.
  • Translation is processed by Soniox as a sub-processor. Provider keys stay on our servers and never reach the browser.
  • An honest statement on accuracy: AI translation can be wrong. MeaningGuard flags phrases that may be misunderstood, but a phrase that isn't flagged can still be wrong, so confirm anything important.

Developers

One flag on the call you already create

Hosted UI users get translation with no code. Otherwise, add a translation block to POST /calls, then use the SDK or the React components in the browser.

REST: create a translated call

request.sh
curl -X POST https://purplecallio.com/api/calls \
  -H "x-api-key: $PURPLECALLIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "callerId": "doc_1",
    "receiverId": "pat_9",
    "callerLanguage": "en",
    "receiverLanguage": "mr",
    "translation": {
      "mode": "voice",
      "lexiconId": "lex_123",
      "context": {
        "industry": "healthcare",
        "purpose": "post-surgery follow-up",
        "roles": { "caller": "doctor", "receiver": "patient" }
      },
      "postCallReport": true,
      "maxMinutes": 30,
      "guard": { "enabled": true, "sensitivity": "standard", "replay": false },
      "onLimit": "captions_then_off"
    }
  }'

Browser SDK

translation.ts
import { TranslationClient } from "@purplecallio/sdk";

// token = this participant's call session token (bj_session_…)
const translation = new TranslationClient({
  serverUrl: "https://purplecallio.com/api",
  token,
  speak: "mr",          // or "auto"
  hear: "en",
  mode: "voice",        // "captions" | "voice"
  originalVolume: 0,    // other person's original voice while it's translated (0 = muted)
  remoteAudio: remoteAudioElement,
});

await translation.enable();

translation.on("caption", (p) => render(p.phraseId, p.original, p.translated));
translation.on("flagged", (p) => markUncertain(p.phraseId, p.guard?.reasons));
translation.on("repeat.requested", ({ prompt }) => showPrompt(prompt));
translation.on("limit", ({ kind, message }) => showBanner(kind, message));

translation.requestRepeat(phraseId);   // ask the speaker to say it again
translation.replay(phraseId);          // only if the project enabled replay
translation.setMode("captions");

React UI Kit

TranslatedCall.tsx
import {
  DualViewCaptions,
  LanguagePicker,
  TranslationControls,
  useTranslation,
} from "@purplecallio/react";

export function TranslatedCall({ token }: { token: string }) {
  const translation = useTranslation({ token, speak: "en", hear: "en", mode: "voice" });

  return (
    <>
      <LanguagePicker translation={translation} />
      <TranslationControls translation={translation} />
      <DualViewCaptions translation={translation} layout="both" />
    </>
  );
}
Read the Live Translate docs

Frequently asked questions

Early access

Let your users talk to anyone

Join early access and we'll enable Live Translate for your account. Tell us your language pairs and use case, and we'll share measured results as they come in.