Migration guide

Move your agents from Vapi or Retell in an afternoon.

Paste an assistant or agent into the importer and it becomes a MediaSFU agent for that client. Anything that needs your hands, like a transfer number or a booking tool, is listed for you.

Five steps

One client at a time, no downtime

Keep the old line answering until the test call on MediaSFU sounds right, then move the number.

  1. 1Connect your AI providers

    Add the same speech-to-text, LLM and voice keys you use today under AI Providers, or start on managed AI.

  2. 2Add the client

    In the Agents dashboard open Agency Clients, add the client and set what you charge.

  3. 3Import the agent

    Open the client, choose Import, and paste the Vapi assistant or the Retell agent with its LLM. Check what maps, then create.

  4. 4Finish what's listed

    The importer lists every tool, transfer number and knowledge file to reconnect. Most take a minute each.

  5. 5Move the number

    Point the client's SIP trunk at MediaSFU under Phone Numbers, attach the agent, and place a test call before switching traffic.

Getting the JSON

What to paste

Vapi

The assistant object from GET /assistant/:id in the Vapi API, or the assistant JSON from the dashboard. Paste it as it is.

Retell

The agent from GET /get-agent/:id and its LLM from GET /get-retell-llm/:id, pasted together as { "agent": …, "llm": … }. The prompt lives on the LLM, so include it.

The import runs in your browser. API keys or credential ids in the JSON are ignored; connect providers under AI Providers.

Field map

What carries over

Based on the public API references for Vapi assistants and Retell agents, October 2026.

Vapi assistant
Their fieldIn MediaSFUNotes
nameAgent name and role
model.messages (system)Instructions (system prompt)Joined if there are several; MediaSFU keeps up to 4,096 characters.
firstMessageFirst message{{variables}} become {variables}.
firstMessageModeSpeaks firstassistant-waits-for-user turns speaking first off.
model.temperatureTemperatureValues above 1 are lowered to 1.
endCallMessage, endCallPhrasesResponse guidelinesWritten as a closing instruction.
maxDurationSecondsMaximum session length1 to 120 minutes.
server.urlWebhookhttps links only.
model.tools: transferCallListed to finishTurn on human handoff and set the transfer on the number.
model.tools (other), toolIdsListed to finishRecreate as agent tools: Calendly, Zapier, Composio, webhooks.
model.knowledgeBaseListed to finishUpload the files to the agent's knowledge.
model.provider / model, voice, transcriberShown for referencePick the same providers under AI Providers.
voicemailMessageNot usedMediaSFU agents don't leave voicemail.
Retell agent and Retell LLM
Their fieldIn MediaSFUNotes
agent_nameAgent name and role
llm.general_promptInstructions (system prompt)Known default_dynamic_variables are filled in; others become {variables}.
llm.states[].state_promptInstructionsEach state is added as its own titled block. Read the result through once.
llm.begin_messageFirst message
llm.start_speakerSpeaks firstuser turns speaking first off.
llm.model_temperatureTemperature
max_call_duration_msMaximum session length1 to 120 minutes.
webhook_urlWebhookhttps links only.
general_tools: transfer_callListed to finishtransfer_destination.number is shown so you can set up the transfer.
general_tools (other)Listed to finishRecreate as agent tools.
knowledge_base_idsListed to finishUpload the files to the agent's knowledge.
llm.model, voice_id, languageShown for referencePick the same providers under AI Providers.
voicemail_optionNot usedMediaSFU agents don't leave voicemail.

Bring over your first client

Start free, import one agent, and compare a test call side by side before you move the number.