DevelopersDocsPricingExamplesDemoAskGitHubSign inGet Started
SDK v1.0 — voice & messaging, one API

One agent.
Every channel.

Write the prompt, tools, and logic once. Pinecall runs it live across phone, web, and messaging — with state and history that follow the caller.

Installnpm i @pinecall/sdk

Channels

Every channel, one agent

You don't rebuild the agent per surface. Write it once; Pinecall meets the caller wherever they are and keeps the conversation in sync.

Telephony & SIP

Bring a number or port your own. Inbound and outbound over PSTN, Twilio, or SIP trunks.

PSTNTwilioSIP

Realtime voice

Sub-second WebRTC voice in the browser or your app, with barge-in and natural turns.

WebRTCbarge-in

WhatsApp & SMS

The same agent answers on messaging — text, voice notes, and media, with full history.

WhatsAppSMS

In-app widget

Drop a voice or chat widget into any site with one snippet. Themeable, tiny, accessible.

embed<script>

Command line

Your whole account, in the terminal

The pinecall CLI ships inside the SDK — inspect agents, chat and grade them, and check phones, keys, and usage without ever opening a dashboard.

zsh — ~/my-app

Browser widget

A voice agent in three lines

Drop @pinecall/web into any framework — framework-agnostic Web Components (<pinecall-orb>,<pinecall-modal>,<pinecall-chat>) with Shadow DOM, live transcript, themes and a tools API for rendering UI mid-call. WebRTC, mic, and turn-taking handled for you.

App.tsx
import "@pinecall/web/modal";

export default function App() {
  return (
    <pinecall-modal
      agent="mara"
      name="Mara"
      visual="wave"
      preset="midnight"
    />
  );
}
Maraoutbound · +1 318 633 096301:24
Mara is speaking…

Anatomy of a turn

The hard real-time parts, handled

Every caller turn runs this loop. Pinecall owns the streaming pieces; you only write the one step that makes the agent yours.

01
Caller audio
WebRTC · SIP
02
Speech-to-text
Deepgram · Gladia
03
Turn detection
Semantic VAD
04
Your code
LLM · tools · data
you own this
05
Speech & reply
ElevenLabs · Cartesia
Caller speaksagent replies≈ 800 ms end to end

Tools

Tools are just functions

No DSL, no remote tool server. Define a tool as a typed function and the agent can call it mid-conversation — with arguments validated for you.

  • Plain async functions — call your DB, APIs, anything.
  • Zod schemas become the model's tool definitions.
  • Runs in your process. No webhooks, no relays, no egress.
tools.ts
const book = tool({
  name: "bookSlot",
  schema: z.object({
    date: z.string(),
    time: z.string(),
  }),
  execute: async ({ date, time }) => {
    return db.appointments.create({ date, time });
  },
});

Models

Bring any model, swap in one line

Pick the LLM, voice, and transcription that fit each agent. Change a string to switch providers — or point at your own endpoint and keep inference in-house.

  • Stream tokens by default for low latency.
  • Mix providers per number or per language.
OpenAILLM
AnthropicLLM
GeminiLLM
DeepgramSTT
ElevenLabsTTS
CartesiaTTS

Get started

Choose how to get started

Ship your first call today with the SDK — or bring in our team for a production rollout.

Self-serve

Build it yourself

Install the SDK and put an agent on the phone the same afternoon.

  • Phone, WhatsApp, WebRTC & chat — one agent
  • Bring any LLM, or run it server-side
  • Tools are local functions — no webhooks
  • Full docs, guides & runnable examples
With our team

Roll out with support

Hands-on help, custom volume pricing, and the controls enterprises need.

  • Dedicated onboarding & solution design
  • Volume pricing & higher concurrency
  • SSO, audit logging & RBAC
  • Self-hosting & data residency options