SDKOverview

Ear3 SDK

Two packages that together give you a signed, end-to-end voice interview flow: one for the browser (branded widget by default, headless SDK on a subpath) and one for your server.

npm install @ear3/voice-interviewer @ear3/server  # branded widget or headless SDK + server
// app/interview/page.tsx — branded turnkey widget, zero UI work
import { Ear3VoiceInterview } from '@ear3/voice-interviewer'
 
<Ear3VoiceInterview
  interviewId={process.env.NEXT_PUBLIC_EAR3_INTERVIEW_ID!}
  publishableKey={process.env.NEXT_PUBLIC_EAR3_VOICE_INTERVIEWER_KEY!}
  onComplete={(e) => router.push('/done')}
/>

Want a fully custom look instead? Same package, /headless subpath — import { Ear3Interview } from '@ear3/voice-interviewer/headless'.

Both modes call the same backend, mint identical sessions, fire the same webhooks. See Concepts for the mental model.

// app/api/webhooks/ear3/route.ts
import { Ear3 } from '@ear3/server'
 
const ear3 = new Ear3(process.env.EAR3_CONFIG_CLI_KEY!)
 
export async function POST(req: Request) {
  const rawBody = await req.text()
  const event = ear3.webhooks.constructEvent(
    rawBody,
    req.headers.get('ear3-signature')!,
    process.env.EAR3_WEBHOOK_SECRET!,
  )
  // event.type === 'interview.completed' → your business logic
}

What lives where

PackageRuns inResponsibilities
@ear3/voice-interviewerBrowserRoot: <Ear3VoiceInterview> (branded widget). /headless: <Ear3Interview> (native RTVI), VoiceClient, hooks + plugins
@ear3/serverYour serverVerify webhooks, retrieve session state, admin ops

Available packages

Where to next


Built by Ear3 — voice interviews for any app.
⌘/