Import agents from another platform
Bring agents, tools, and knowledge bases over from Vapi, Retell, ElevenLabs Agents, or Bland with an API key or a JSON export, review the mapping, and import.
If your agents live on Vapi, Retell, ElevenLabs Agents, or Bland, the importer fetches them, maps every field onto ThunderPhone, and shows you the result before anything is created.
Start an import
- Open Agents and choose Import (or Import from Vapi, Retell, ElevenLabs, or Bland on an empty agents page).
- Pick the platform.
- Paste an API key, or switch to Paste exported JSON and paste one or more agent objects from that platform's dashboard or API.
- Choose Fetch my agents. Fetching and mapping usually takes under a minute; you can leave the page and come back through the task tray.
Review the plan
Each agent shows the name, matched voice (with how confident the match is), intelligence tier, the tools and knowledge bases it brings, and notes about anything that changed in translation. Expand a row to read the prompt:
- Rewritten — one coherent prompt in the style of the prompting guide, with every phone number, URL, tool name, and placeholder from the source preserved.
- Structured — the source config laid out under headings, exactly as extracted. Used automatically when the rewrite cannot be verified.
Untick agents you do not want (test copies are unticked by default), edit names, voices, tiers, or the prompt choice, then Import. Created agents open in the builder with their API connections and knowledge attached.
What is imported
Get a private key at Dashboard → API Keys.
| Vapi field | ThunderPhone |
|---|---|
model.messages[system] | Prompt |
firstMessage, firstMessageMode | Opening line in the prompt; who speaks first |
voice.provider + voiceId | Closest catalog voice (match confidence shown) |
transcriber.language | Primary language |
model.model | Intelligence tier |
model.tools / toolIds (function, apiRequest) | API connections |
transferCall destinations | Hand-off section of the prompt (built-in transfer) |
endCall, dtmf | Built-ins |
knowledgeBaseId + files | Knowledge base with documents |
endCallMessage, endCallPhrases, voicemailMessage, messagePlan.idleMessages | Prompt sections; voicemail message setting |
silenceTimeoutSeconds | Silence hang-up |
maxDurationSeconds, server.url, squads, workflows, sms/ghl/make/code/mcp tools | Reported, not imported |
Create a key under System Settings → API Keys; enable Restrict permissions and set every group to Read — that is all the importer needs.
| Retell field | ThunderPhone |
|---|---|
Retell LLM general_prompt, begin_message, start_speaker | Prompt; opening line; who speaks first |
states + starting_state | Ordered call procedure in the prompt |
Conversation flow global_prompt + nodes | Ordered call procedure with transfers and end nodes |
general_tools custom | API connections |
transfer_call, end_call, press_digit | Prompt hand-off + built-ins |
voice_id (11labs-, openai-, cartesia-, …) | Closest catalog voice |
language | Primary and additional languages |
model / s2s_model | Intelligence tier |
knowledge_base_ids (url, document, text sources) | Knowledge base with documents |
voicemail_option, end_call_after_silence_ms, boosted_keywords | Voicemail setting; silence hang-up; prompt terms |
webhook_url, max_call_duration_ms, custom-LLM engines, send_sms, MCP | Reported, not imported |
Create a key under Profile → API keys.
| ElevenLabs field | ThunderPhone |
|---|---|
conversation_config.agent.prompt.prompt | Prompt |
first_message, language | Opening line; primary language |
prompt.llm | Intelligence tier |
tts.voice_id | Closest catalog voice |
tools / tool_ids of type webhook | API connections (query or body schema) |
system tools end_call, transfer_to_number, keypad | Built-ins + prompt hand-off |
knowledge_base url/text/file entries | Knowledge base (URLs fetched; text and files by id need the key) |
turn.silence_end_call_timeout | Silence hang-up |
conversation.max_duration_seconds, client tools, MCP | Reported, not imported |
Your key is under Settings in the Bland dashboard.
| Bland field | ThunderPhone |
|---|---|
Web agent prompt, first_sentence, language, model, voice | Prompt; opening line; language; tier; closest voice |
Custom tools (name, url, method, input_schema, headers) | API connections |
Inbound number prompt or pathway_id | One agent per inbound number |
| Pathway nodes and edges (Default, Knowledge Base, Transfer Call, End Call, Webhook) | Ordered call procedure; knowledge-base node text becomes a document; transfers and webhooks become built-ins and API connections |
transfer_phone_number | Hand-off section |
max_duration, webhook | Reported, not imported |
| Bland-owned numbers | Reported as not portable |
What needs a step on ThunderPhone
The report at the bottom of the review page lists everything that did not move and why:
- Phone numbers. Numbers you own on a carrier can be connected as VoIP numbers. Platform-owned numbers cannot be moved; get a new number and attach it to the imported agent.
- Per-agent webhooks. ThunderPhone delivers signed webhooks per organization; set one up under Webhooks.
- Vendor-stored credentials. Tool headers that were visible are copied. Credentials the old platform stored by id are flagged; add them to the API connection's headers.
- Tools without an equivalent (SMS sending, platform-specific automations) are listed so nothing is dropped silently.
- Call duration caps. ThunderPhone has no per-agent maximum call length; use the silence hang-up setting and your prompt's ending rules instead.
Importing without a key
Choose Paste exported JSON and paste the object(s) your platform's API or dashboard exports: a Vapi assistant, a Retell agent (optionally with its Retell LLM or conversation flow embedded), an ElevenLabs agent, or a Bland agent or pathway. Anything referenced only by id (tools, knowledge bases) cannot be resolved without a key and is listed in the notes.
After the import
- Open each agent and read its notes.
- Place a test call from the builder.
- Attach a phone number.
- Test each API connection with the request tester.
- Check that knowledge documents finished indexing.
- Set an organization webhook if the old agents used one.
The importer is also available over the REST API.