Core
Engagement
Live monitoring and outbound
campaigns.
Connections
Apps, APIs, MCP servers, and VoIP providers your
agents can use.
Quality & Testing
Organization
Eventing
Webhooks and function tools for
your own code.
Organizations
An organization is the unit of tenancy. Every other resource — agents, phone numbers, calls, keys — belongs to exactly one org. Your account can belong to many orgs; each has its own balance, its own keys, and its own members list. Thesk_live_ API key you create under Organization → Keys is
bound to one organization. That binding is what makes the REST API so
flat: you never put an org id in URL paths, because your key already
identifies it.
In the dashboard: the organization switcher (sidebar footer) and
Organization settings — tabs for General, Keys, Alerts, Billing
Settings, and Billing History.
In the API: /v1/orgs,
/v1/developer/api-keys.
Agents
An agent is the AI configuration that runs a call. It bundles:- A prompt that governs what the agent says and how it behaves — including call actions like transfers, keypad presses, and hang-ups, which are plain prompt lines rather than separate configuration.
- An engine tier (
spark,bolt,storm-*): Spark is optimized for cost, Bolt for speed, Storm for intelligence on complex prompts. - A voice plus a primary language and optional additional languages — the agent switches automatically when a caller changes language. See Supported languages.
- Attached capabilities: connected apps, API connections, knowledge bases, MCP servers, and inline function tools.
- Behavior knobs: speak order, acknowledgement mode, background track, hold timeout.
/dashboard/agents). See
Build your first voice agent.
In the API: /v1/agents — CRUD,
duplicate, transfer, version history, and prompt helpers.
Phone numbers
A phone number belongs to an org and routes inbound calls to an agent (and can carry outbound calls). Two sources:- Demo numbers — real U.S. numbers provisioned from ThunderPhone’s pool, live in seconds. Inbound-only, they answer with a short spoken disclaimer, and the dashboard caps an org at 10 of them. Perfect for a first test; not for production.
- VoIP numbers — brought from your own provider through a VoIP connection. Twilio and Telnyx connect directly (Telnyx has a guided setup); SignalWire and Vonage are coming soon — today you reach them via manual SIP configuration, which accepts any SIP trunk. Once imported and verified, VoIP numbers support inbound and outbound.
/dashboard/phone-numbers).
See Get a phone number.
In the API: /v1/phone-numbers,
/v1/voip-connections,
/v1/phone-number-labels.
Calls
Every inbound call, outbound call, simulation, and widget session becomes a call log. A call carries the full role-tagged transcript, the structured turn history (including tool calls), a recording, the billing total, and optional AI grading and issue reports. While a call is live, you can open it and listen in — you join silently, and nobody on the call hears you. Once listening, you can whisper: type an instruction that goes straight to your agent mid-call; the caller never hears it, and the agent follows it live. In the dashboard: Call History (/dashboard/call-history) for
the archive and per-call detail; Live for calls in progress. See
Review, listen to, and coach your calls.
In the API: /v1/calls — list, transcript,
history, audio, grading, export;
/v1/issue-reports.
Web widgets
The web widget gives your site visitors a mic-based conversation with an agent — no phone number needed. It authenticates with a publishable key (pk_live_...) that’s origin-locked to your
allowed domains, so it’s safe in client-side code.
Keys run in one of two modes: agent (statically bound to one agent)
or webhook (your server picks the configuration per visitor — see
Dynamic per-call configuration). Widget
sessions flow through the same call infrastructure as phone calls.
In the dashboard: Web Widgets (/dashboard/web-widgets) —
create widgets, set the mode and agent, manage allowed domains, and
copy the embed snippet. See
Create a web widget.
In the API: /v1/publishable-key,
/v1/mic-session, and the
Widget SDK docs.
Knowledge bases
A knowledge base is a set of documents your agent can search mid-call to ground its answers — upload files directly or import from Google Drive, then attach the knowledge base to an agent in the builder. The agent queries it with a built-in search tool whenever the conversation calls for it. In the dashboard: Knowledge (/dashboard/knowledge) for the
document library; the builder’s Knowledge section to attach one to
an agent. See
Give your agent a knowledge base.
Connections
Connections are how agents reach the outside world. Four kinds, one sidebar group:- Apps (
/dashboard/app-connections) — OAuth connections to Slack, HubSpot, Salesforce, Google Calendar, Google Sheets, and Cal.com. Connect once, then toggle per-operation tools (post a Slack message, upsert a HubSpot contact, book a Cal.com slot…) onto any agent. See Connect apps. - APIs (
/dashboard/api-connections) — turn any HTTP API into an agent action. Paste a cURL command and the AI wizard drafts the tool definition, or build it manually; a Test Request button fires a sandbox call before you ship. See API connections — the dashboard face of/v1/integrations. - MCP (
/dashboard/mcp-connections) — add a Model Context Protocol server by URL and let the agent use the tools it exposes. See Add an MCP server. - VoIP (
/dashboard/voip-connections) — provider credentials for bringing your own phone numbers. See Connect a VoIP provider.
/v1/integrations and
/v1/voip-connections; see also
Build a tool integration.
Campaigns
A campaign places outbound calls at scale: upload a CSV of contacts, pick the agent and from-number, and set the calling window (days and hours, timezone-aware), concurrency, and retry policy (max attempts and which outcomes — no answer, voicemail, failed — get retried). The campaign works through the list and records every call in Call History. In the dashboard: Campaigns (/dashboard/campaigns). See
Run an outbound calling campaign.
For one-off programmatic calls: the
outbound calls API.
Live monitoring
Live shows every call in progress across the org, and lets you open any of them to listen in and whisper in real time. It’s the supervision surface: watch a new prompt take its first real traffic, or keep an eye on a running campaign. In the dashboard: Live (/dashboard/live). See
Watch and supervise live calls.
Simulations
A simulation is an AI caller having a real conversation with your agent — same telephony path, real transcript, real grading — so you can test before (and after) you ship. Point it at an agent or a phone number, write the caller scenario yourself or generate scenarios with AI from the agent’s prompt (edge cases included, if you ask), and watch the call live. Scenarios group into suites that pin a minimum pass rate and can gate releases in CI; regressions against the accepted baseline are reported per scenario. In the dashboard: Simulations (/dashboard/simulations), plus
the Simulation button inside the agent builder. See
Simulate a call.
In the API: /v1/test-calls and the
suite runner — see Test an agent end-to-end.
Experiments
An experiment A/B tests agent configurations on live traffic: define variants (different prompts, engines, or settings), split traffic between them, and compare outcomes per variant. Use it instead of hand-rolling bucket logic in a webhook. In the dashboard: Experiments (/dashboard/experiments) and
the A/B tab in the agent builder. See
Experiments (A/B testing).
Issues
An issue is a flagged problem on a specific call — filed by a human reviewer or detected by AI grading. Issues carry severity, source, and status, and the Issues page is the triage queue: filter, inspect the offending call, and track fixes. In the dashboard: Issues (/dashboard/issues), plus per-call
flagging in Call History. See Issues triage.
In the API: /v1/issue-reports.
Reports
A report answers a natural-language question about your call data (“What were the top three reasons callers asked for a human last week?”) with an AI-written analysis, scoped to the agents and date range you choose. In the dashboard: Reports (/dashboard/reports). See
Reports.
Observability
Observability is the metrics surface: call volume, outcomes, and quality over time, filterable by agent and time window, with export for downstream analysis. In the dashboard: Observability (/dashboard/observability).
See Observability.
Alerts
An alert rule watches a metric (success rate, failure rate, average score, call volume, suite regressions) over a time window and fires when it crosses your threshold. Notifications go to email and Slack, and fire analert.triggered event to your
webhook endpoints.
In the dashboard: Organization → Alerts. See
Alerts.
Webhooks
ThunderPhone sends HTTP POST webhooks to your server when things happen during and after a call. Two delivery models:- Webhook endpoints (recommended): manage many URLs at
/v1/developer/webhook-endpointswith per-endpoint secrets and per-endpoint event subscriptions. - Legacy single-URL webhook: one URL per org. Managed at
/v1/webhookor under Organization → General. Kept for backward compatibility.
- Blocking events expect your server to respond with configuration
that shapes the in-flight call — the
incoming-call events
(
telephony.incoming/web.incoming). You have up to 10 seconds to respond; on timeout the statically-assigned agent handles the call. - Non-blocking events are fire-and-forget notifications, retried with exponential backoff — see delivery semantics.
X-ThunderPhone-Signature. See
Signature verification.
Function tools
A function tool is an HTTP endpoint your agent can call mid-conversation. You give ThunderPhone an OpenAI-style function schema plus an endpoint URL; the agent decides when to call it, and ThunderPhone makes the signed HTTP request from its servers and hands the result back to the agent. Agents also ship built-in call abilities — transferring the call, sending keypad (DTMF) input, ending the call, waiting on hold — that you enable with plain prompt lines rather than tool definitions. In the dashboard: the builder’s API connections section (see Connections). In the API:/v1/integrations and
the Function Tools spec.
Team and roles
Each organization has a members list with two roles: Members build and operate agents; Admins also manage the team and billing. Invite by email — invitations expire after 7 days and can be revoked; the ⋯ menu on a member row changes roles or removes someone. Single sign-on can be configured org-wide — see SSO. In the dashboard: Organization → General. See Invite your team. In the API:/v1/members,
/v1/invites.
Billing
ThunderPhone is prepaid. Each org carries a USD balance; calls debit it at the agent’s per-minute rate (engine tier plus surcharges — the builder shows the all-in rate live as you change settings, and premium languages add 2¢/min). When the balance hits zero, inbound calls are rejected and outbound calls return402 Payment Required.
Top up manually, or enable auto top-up with a balance threshold, a
refill amount, and an optional monthly spending limit — so a call
never dies mid-sentence.
In the dashboard: Organization → Billing Settings and
Billing History. See
Add funds and turn on auto top-up.
In the API: /v1/billing.
The in-app copilot
The dashboard ships with a built-in copilot — ask it “how do I X” and it answers from these docs, offers click-by-click walkthroughs that spotlight the real controls, and can replay any of the guided tours. It’s the fastest way to find a control this page mentions. See Ask the in-app copilot.Putting it together
Dashboard quickstart
The five-step wizard: agent → billing → number → simulation → review.
API quickstart
The same first call in four REST calls.
Using the dashboard
Build an agent, fund it, get a number, simulate, and review calls.
Connect tools & data
OAuth apps, custom APIs, MCP servers, and VoIP providers.
Analyze & improve
Reports, observability, experiments, issues, and alerts.
Team & account
Invites and roles, API keys, security, and SSO.
Developer cookbook
The API recipes: inbound, outbound, dynamic config, tools, testing.
Verify webhook signatures
Get the HMAC check right once and reuse everywhere.